立即开始
通过 SSH 连接 GPU 服务器
创建密钥,下单时把公钥发给我们,然后连接服务器、与团队共享访问权限,并对 SSH 做安全加固。
要通过 SSH 连接 FullGPU 的 GPU 服务器,您需要一对密钥:私钥留在您的电脑上,公钥放在服务器上。我们会安装您随订单提交的公钥,因此首次登录无需密码。本页内容包括:在 macOS、Linux 和 Windows 上配置 SSH 密钥、添加配置条目、为团队成员开通访问权限,以及基础安全加固。如果您的服务器已经交付,快速入门会从首次登录之后讲起。
创建 ed25519 密钥
ed25519 密钥短小、速度快,所有现行 OpenSSH 版本都支持。同一条命令适用于 macOS、Linux,以及 Windows 10 或 11 的 PowerShell(这两个版本的 Windows 已自带 OpenSSH 客户端):
ssh-keygen -t ed25519 -C "alice-laptop"
- 按 Enter 键接受默认位置:macOS 和 Linux 上为
~/.ssh/id_ed25519,Windows 上为C:\Users\you\.ssh\id_ed25519。 - 设置一个密码短语(passphrase)。万一笔记本电脑丢失,它能保护您的密钥。
- 显示公钥:
您应该会看到以# macOS and Linux cat ~/.ssh/id_ed25519.pub # Windows PowerShell Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub开头的一行内容。ssh-ed25519 后面的文字只是一个标签。-C
随订单提交公钥
在部署服务器时,将 .pub 文件的整行内容粘贴到订单表单中,或选择您已保存在控制台中的密钥。如果忘了提交,请在服务器交付后从控制台提交工单。只分享以 .pub 结尾的文件:我们只需要公钥,私钥绝不应离开您的电脑。
连接服务器
ssh root@203.0.113.10
请使用控制台中显示的 IP 地址和用户名;本站的示例使用 root 和文档专用地址 203.0.113.10。首次连接时,SSH 会显示服务器的主机密钥指纹,并请您确认。输入 yes 后,该主机密钥即保存到 ~/.ssh/known_hosts 中。随后您应该会看到 shell 提示符,运行 whoami 会输出您的用户名。如果您的密钥不在默认位置,请加上 参数,后接密钥路径。
在 ~/.ssh/config 中保存连接
配置条目可以省去重复输入,scp、rsync 和 VS Code 也会沿用它。在您电脑上的 ~/.ssh/config(Windows 上为 C:\Users\you\.ssh\config)中添加以下内容:
Host gpu1
HostName 203.0.113.10
User root
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
ServerAliveInterval 60
现在运行 ssh gpu1 即可直接连接。IdentitiesOnly yes ServerAliveInterval 可防止空闲会话被断开。
为团队成员开通访问权限
让每个人使用各自的密钥,这样撤销其中一人的权限时不会影响其他人。先向每位团队成员索取公钥,然后选择下面任一种方式。
为现有账户添加密钥
nano ~/.ssh/authorized_keys # paste the key on a new line and save
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
authorized_keys 中的每一行就是一把密钥。要撤销访问权限,删除对应的行即可。
创建独立账户(推荐)
sudo adduser --disabled-password bob
sudo mkdir -p /home/bob/.ssh
sudo nano /home/bob/.ssh/authorized_keys # paste Bob's public key
sudo chown -R bob:bob /home/bob/.ssh
sudo chmod 700 /home/bob/.ssh
sudo chmod 600 /home/bob/.ssh/authorized_keys
adduser 会询问全名等信息,按 Enter 键跳过即可。该账户没有密码,因此 Bob 只能用自己的密钥登录:运行 ssh bob@203.0.113.10 应能让他进入 shell。如果他需要管理员权限,先用 sudo passwd bob 为他设置一个执行 sudo 时使用的密码,再运行 sudo usermod 。docker 组的权限等同于 root,因此只添加您愿意授予 sudo 权限的人。
关闭密码登录
只允许密钥登录,就能杜绝密码猜测。请先检查当前实际生效的设置:
sudo sshd -T | grep -Ei \
'^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin)'
如果 passwordauthentication 显示为 yes/etc/ssh/sshd_config.d/ 中的文件按字母顺序读取,因此 前缀能让这几行配置优先生效:
sudo tee /etc/ssh/sshd_config.d/00-keys-only.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
EOF
sudo sshd -t && sudo systemctl reload ssh
保持当前会话不要断开。在另一个终端中确认密钥登录仍然可用,且密码登录会被拒绝:
ssh gpu1 'echo key login works'
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password gpu1
第二条命令最后应输出 Permission denied (publickey)。
可选:fail2ban
关闭密码登录后,扫描程序就无法登录,但仍会塞满您的日志。fail2ban 会在多次失败后封禁相应地址,Ubuntu 的软件包默认启用了它的 sshd jail:
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
您应该能看到 sshd jail 及其计数器。如果服务无法启动,请查看 sudo journalctl 的输出;在没有 /var/log/auth.log 的精简镜像上,在 /etc/fail2ban/jail.local 的 [sshd] 段下添加 backend = systemd,然后重启该服务。
端口转发基础
SSH 可以承载其他连接,因此无需开放端口,就能访问只监听服务器回环接口的服务:
# your localhost:8888 reaches 127.0.0.1:8888 on the server
ssh -N -L 8888:127.0.0.1:8888 gpu1
# several ports at once
ssh -N -L 8888:127.0.0.1:8888 -L 8000:127.0.0.1:8000 gpu1
只建立隧道,不打开远程 shell;按 Ctrl+C 即可停止。远程开发一文用这种方式访问 JupyterLab,防火墙指南则介绍必须对公网开放的服务。
故障排查
- Permission denied (publickey). 运行
ssh查看客户端提供了哪些密钥,并检查用户名。在服务器上,-v gpu1 ~/.ssh的权限必须为 700,authorized_keys的权限必须为 600,并且两者的所有者都必须是该用户。 - REMOTE HOST IDENTIFICATION HAS CHANGED. 重装系统后出现此提示属于正常情况:用
删除旧条目即可。如果服务器并未重装,请不要连接,并从控制台提交工单。ssh-keygen -R 203.0.113.10 - 改动后无法登录。不要反复重试。请从控制台提交工单,写明服务器 IP 和您改动了什么。
问题仍未解决?
请在控制台提交工单,写明服务器、您运行了什么以及错误输出(如有)。工程师 7×24 小时答复。