立即开始

通过 SSH 连接 GPU 服务器

创建密钥,下单时把公钥发给我们,然后连接服务器、与团队共享访问权限,并对 SSH 做安全加固。

本页内容
  1. 创建 ed25519 密钥
  2. 随订单提交公钥
  3. 连接服务器
  4. 在 ~/.ssh/config 中保存连接
  5. 为团队成员开通访问权限
  6. 关闭密码登录
  7. 端口转发基础
  8. 故障排查

要通过 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"
  1. 按 Enter 键接受默认位置:macOS 和 Linux 上为 ~/.ssh/id_ed25519,Windows 上为 C:\Users\you\.ssh\id_ed25519。
  2. 设置一个密码短语(passphrase)。万一笔记本电脑丢失,它能保护您的密钥。
  3. 显示公钥:
    # 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 会输出您的用户名。如果您的密钥不在默认位置,请加上 -i 参数,后接密钥路径。

在 ~/.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 让 SSH 只提供这一把密钥,在您的 ssh-agent 中存有多把密钥时,可以避免“Too many authentication failures”错误。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 -aG sudo bob。docker 组的权限等同于 root,因此只添加您愿意授予 sudo 权限的人。

关闭密码登录

只允许密钥登录,就能杜绝密码猜测。请先检查当前实际生效的设置:

sudo sshd -T | grep -Ei \
  '^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin)'

如果 passwordauthentication 显示为 yes,请添加一个 drop-in 配置文件。对于大多数设置,OpenSSH 采用它最先读到的值,而 /etc/ssh/sshd_config.d/ 中的文件按字母顺序读取,因此 00- 前缀能让这几行配置优先生效:

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 -u fail2ban 的输出;在没有 /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

-N 只建立隧道,不打开远程 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 小时答复。

提交工单

登录 FullGPU

管理您的 GPU 服务器、余额和账单。

首次使用 FullGPU? 创建账户