# 通过 SSH 连接 GPU 服务器

> 如何通过 SSH 连接 GPU 服务器：在 macOS、Linux 或 Windows 上创建 ed25519 密钥，连接服务器，添加团队成员，并禁用密码登录。步骤可直接复制。

来源：https://fullgpu.com/zh/docs/ssh-access  
更新日期：2026-10-23  
发布方：FullGPU (https://fullgpu.com/)

要通过 SSH 连接 FullGPU 的 GPU 服务器，您需要一对密钥：私钥留在您的电脑上，公钥放在服务器上。我们会安装您随订单提交的公钥，因此首次登录无需密码。如果您选择的是 root 密码，也可以[在交付后添加密钥](https://fullgpu.com/zh/docs/ssh-access#password-login)。本页内容包括：在 macOS、Linux 和 Windows 上配置 SSH 密钥、添加配置条目、为团队成员开通访问权限，以及基础安全加固。如果您的服务器已经交付，[快速入门](https://fullgpu.com/zh/docs/quickstart)会从首次登录之后讲起。

## 创建 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` 后面的文字只是一个标签。

## 随订单提交公钥

在[部署服务器](https://fullgpu.com/zh/deploy)时，将 `.pub` 文件的整行内容粘贴到订单表单中，或选择您已保存在控制台中的密钥。如果忘了提交，请在服务器交付后从控制台[提交工单](https://fullgpu.com/zh/help/getting-support)。只分享以 `.pub` 结尾的文件：我们只需要公钥，私钥绝不应离开您的电脑。

## 下单时选择了密码登录？

如果您下单时选择了密码登录，请使用 `ssh root@203.0.113.10` 连接，并输入控制台中显示的 root 密码。然后把公钥复制到服务器上，以便改用密钥登录：

```
ssh-copy-id root@203.0.113.10
```

Windows 没有 `ssh-copy-id`，请在 PowerShell 中改为运行：

```
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
```

确认密钥登录正常后，请用 `passwd` 修改密码，然后[关闭密码登录](https://fullgpu.com/zh/docs/ssh-access#disable-password-login)。

## 连接服务器

```
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 即可停止。[远程开发](https://fullgpu.com/zh/docs/remote-development)一文用这种方式访问 JupyterLab，[防火墙指南](https://fullgpu.com/zh/docs/networking-firewall)则介绍必须对公网开放的服务。

## 故障排查

- **Permission denied (publickey).** 运行 `ssh -v gpu1` 查看客户端提供了哪些密钥，并检查用户名。在服务器上，`~/.ssh` 的权限必须为 700，`authorized_keys` 的权限必须为 600，并且两者的所有者都必须是该用户。
- **REMOTE HOST IDENTIFICATION HAS CHANGED.** 重装系统后出现此提示属于正常情况：用 `ssh-keygen -R 203.0.113.10` 删除旧条目即可。如果服务器并未重装，请不要连接，并从控制台提交工单。
- **改动后无法登录。**不要反复重试。请从控制台[提交工单](https://fullgpu.com/zh/help/getting-support)，写明服务器 IP 和您改动了什么。

## 相关页面

- [GPU 服务器快速入门](https://fullgpu.com/zh/docs/quickstart): GPU 服务器快速入门，适用于新交付的 FullGPU 服务器：通过 SSH 登录、检查各张 GPU、更新 Ubuntu 系统，再运行第一个 GPU 容器，每一步都附有检查方法。
- [在 GPU 服务器上使用 VS Code Remote SSH 和 Jupyter](https://fullgpu.com/zh/docs/remote-development): 在您的 GPU 服务器上使用 VS Code Remote SSH，通过 SSH 隧道在远程 GPU 上运行 Jupyter，并用 rsync 和 scp 传输数据。采用安全的默认设置，分步讲解。
- [GPU 服务器防火墙配置](https://fullgpu.com/zh/docs/networking-firewall): GPU 服务器防火墙配置指南：用 ufw 先放行 SSH 再启用防火墙，同时过滤 IPv6，避开 Docker 发布端口绕过 ufw 的陷阱，并用 TLS 和 API 密钥保护 vLLM 推理端点。
- [GPU 服务器操作系统镜像：预装 CUDA、ROCm 与 Docker](https://fullgpu.com/zh/products/os-images): GPU 服务器操作系统镜像：Ubuntu 22.04 与 24.04，预装 NVIDIA 驱动、CUDA、Docker 和 Container Toolkit；AMD 服务器另有 ROCm 镜像。了解镜像中预装了哪些软件。
