Skip to content

SSH 远程连接

您可以通过 SSH 安全地从本地计算机登录到智算云平台的开发机实例,并在开发机实例上执行命令。

前置条件

  • 开发机实例已开机,并已进入运行中状态。

SSH 客户端

请确保本地计算机已安装 SSH 客户端,确保 ssh 命令可用。

  • Mac 用户可使用自带终端(Terminal)。
  • Windows 用户可在 CMD 或 PowerShell 中使用 Windows 自带的 OpenSSH 客户端。如果无法使用 CMD 或 PowerShell,可下载安装 Git for Windows ,通过 Git Bash 使用 SSH。
  • 其他支持 SSH 客户端的工具,例如 VS Code。

SSH 服务端

如果开发机实例使用自定义镜像(非平台预置镜像),有可能缺失 openssh-server 组件导致 SSH 相关功能异常。常见报错:

"您的镜像中缺少 openssh-server,您正在连接到一个功能受限的 SSH 服务器,无法用作端口转发/scp 文件传输等用途,仅可用于 SSH 命令行和 sftp 文件传输"

遇到以上报错,建议您如下处理:

  • 推荐方案:遵循镜像基础组件要求完善镜像,使用新镜像重启开发机实例。
  • 临时处理:安装 openssh-server 等缺失组件,随后重启开发机实例。

密码认证 vs 密钥认证

开发机实例支持 SSH 基于密码的认证,也支持基于公钥的身份验证。

以下提供两种方式的对比:

特性密码认证密钥认证
方便性简单,只需记住密码需要生成和管理密钥对
配置复杂度简单,开发机实例启用「SSH 登录密码」复杂,需要生成 SSH 密钥对并配置
认证速度较慢,每次登录都需要输入密码快速,无需输入密码
密钥管理无需管理密钥需要妥善管理私钥,防止泄露
自动化需要输入密码可以实现无密码自动登录

信息

  • 以上对比不涉及安全性。如使用密码认证,请确保密码不要泄漏。
  • 智算云平台提供 SSH 公钥管理功能。您可以将 SSH 公钥提交给平台,平台将在您创建的开发机实例中自动注入您的 SSH 公钥。

SSH 远程登录

选择 SSH 基于密码的认证,或基于 SSH 公私钥对的验证。从开发机实例详情页面可一键复制 SSH 登录命令。

启用 SSH 密码认证

如果您习惯通过密码认证(Password-based Authentication)远程登录开发机实例,请在创建开发机实例时,启用 SSH 登录密码。启用之后,由平台自动生成初始 SSH 密码(首次自动生成,后续修改时可手动设置)。与开发机实例建立 SSH 连接时,您需要提供该密码。

信息

  • SSH 登录密码可在开发机实例详情页获取。
  • 如果未在创建开发机实例时启用 SSH 登录密码,可通过「改配」功能启用 SSH 密码登录。如何改配?
  • 虽然支持基于密码的认证,但仍建议为开发机实例设置基于 SSH 密钥的认证。

使用 SSH 密钥认证

使用 密钥登录(Key-based Authentication) 取代密码登录,可以让您的远程连接更安全、更方便。它通过一对公钥和私钥进行身份验证,不需要每次输入密码,也能有效防止密码被猜测或泄露。只要妥善保管好您的私钥,就能轻松又安全地连接开发机实例,是目前最推荐的 SSH 登录方式。

开发机实例的 ~/.ssh/authorized_keys 文件决定了哪些公钥可以用来登录服务器。只要某个公钥被添加到这个文件中,对应的私钥就能安全地访问服务器,无需输入密码。您可以通过添加或删除公钥的方式,灵活地管理哪些设备或用户拥有登录权限。

推荐使用平台的 SSH 公钥管理功能统一管理 ~/.ssh/authorized_keys 文件。您只需将 SSH 公钥提交到平台,平台会在您的任何开发机实例启动时检查 ~/.ssh/authorized_keys 文件,并自动注入 SSH 公钥。如未生效,请考虑重启实例。

alt text

如果在开发机实例中手动修改 ~/.ssh/authorized_keys 文件,增删公钥的修改即刻生效。但手动修改仅持久化保存在开发机实例系统盘,如果改配开发机实例,且选择清空系统盘,手动修改将丢失。

一键复制 SSH 命令

进入开发机实例详情页面,可一键复制 SSH 地址。如已启用 SSH 登录密码,可同时复制密码。

alt text

例如,云平台用户 Jane Doe 复制的 SSH 地址为:

language-bash
ssh -p 44851 root@111.51.90.14
  • -p 44851: 端口号。开发机实例 SSH 服务使用非默认端口号。

  • root:默认 SSH 登录用户名(部分旧版实例展示为非 root 普通用户名,请重启)。

  • 111.51.90.14:开发机实例 SSH 服务 IP。

如果开发机实例已添加 SSH 公钥,将直接登录。如果使用密码认证,输入正确的密码后将成功登录。密码错误 3 次后,10 分钟内无法再次使用 SSH 密码验证。

信息

部分可用区的开发机实例存在网络限制,无法访问公网。如发现无法从公网连接开发机实例,请检查 SSH IP 是否为内网 IP。

重置 SSH 密码

开发机实例的创建者可自助重置密码。进入开发机实例详情页后,可点击修改密码,输入符合规则的新密码并提交。新密码立即生效,无需重启开发机实例。

其他 SSH 功能

使用 root 账号

开发机实例默认使用 root 帐号登录,默认登录账号与登录云平台账号保持一致。

警告

部分旧版开发机实例仍默认使用非 root 普通用户名登录,重启后将自动更新。

SSH 登录的环境变量

在实例使用 NGC Pytorch / Nvidia CUDA 等容器镜像时,通过 SSH 登录开发机实例看到的环境变量(尤其是 PATH可能与 Web Terminal 不一致。通过云平台网页终端(Web Terminal)进入容器时,Python 环境、CUDA 工具链和各项依赖均开箱即用;但通过 SSH(或 VS Code Remote-SSH)连接时,系统却提示找不到 nvcctorch 甚至 conda 命令。

为什么会不一致

Web Terminal 与 SSH 都是进入同一开发机实例的方式,但它们遵循不同 Shell 初始化链路:

  • Web Terminal 通常以容器运行时方式启动 Shell(类似 docker exec),继承镜像 Dockerfile 中定义的全部 ENV 变量(如 PATH=/usr/local/cuda/bin:$PATH),直接读取内存中的容器配置。
  • SSH 登录 按标准 Linux 登录流程构建登录环境(login shell),环境变量来自系统与用户的登录初始化脚本(加载 /etc/environment//etc/profile/~/.profile 等文件)。

因此,在一些镜像中,Web Terminal 与 SSH 会话看到的 PATH、python、conda、CUDA 工具链可见性可能不同。这是容器化环境中常见的行为。为获得一致、可预测的开发体验,建议按本节提供的方式统一配置登录环境。

信息

并非所有平台预置镜像均包含上述工具链。绝大部分镜像已预置 Miniconda。CUDA、NVIDIA 工具取决于您是否选用了 CUDA 镜像或 NGC 镜像。

检查 SSH 会话的 PATH

在 SSH 登录后执行:

language-bash
echo "$0"
echo "$PATH" | tr ':' '\n'

command -v nvcc   || echo "nvcc not found"
command -v conda  || echo "conda not found"
command -v python || echo "python not found"
command -v python3|| echo "python3 not found"

如果输出中没有 /usr/local/cuda/bin/usr/local/nvidia/bin/usr/local/miniconda3/bin,说明 SSH 登录环境未加载平台工具链路径。

持久化配置方案

平台会持久化开发机实例系统盘,因此 /root/.profile/etc/profile 是可选且可持久化的修复点。/etc/profile.d/ 是更系统化的修复点。下面给出两种持久化修复方案,任选其一即可。

方案 A 在 /root/.profile 文件中补齐 PATH

将以下内容追加到 /root/.profile 末尾,可保证 root 用户 SSH 登录后可正常使用 nvcc 等工具:

language-shell
# Platform PATH fix (SSH login)
path_prepend () { case ":$PATH:" in *":$1:"*) ;; *) PATH="$1:$PATH";; esac; }

path_prepend /usr/local/miniconda3/bin
path_prepend /usr/local/nvidia/bin
path_prepend /usr/local/cuda/bin
export PATH

# Optional: make `conda` command available (does NOT auto-activate base)
if [ -f /usr/local/miniconda3/etc/profile.d/conda.sh ]; then
  . /usr/local/miniconda3/etc/profile.d/conda.sh
fi

退出并重新 SSH 登录后验证:

language-bash
command -v nvcc && nvcc -V
command -v python && python -V
command -v conda

信息

如果存在 /root/.bash_profile,bash 会优先读取它而不是 /root/.profile。建议确保 /root/.bash_profile 包含:

language-shell
[ -f ~/.profile ] && . ~/.profile

/etc/profile / ~/.profile 主要影响 login shell。如果您需要 ssh host "nvcc -V" 这类非交互远程命令也稳定可用,建议通过 login shell 执行,例如:

language-shell
ssh <host> 'bash -lc "nvcc -V && python -V"'

方案 B 通过 /etc/profile.d/ 注入平台工具链 PATH

如果希望 SSH 登录时稳定获得一致的 PATH;后续维护更清晰;不依赖用户 dotfile 结构,可使用本方案。

执行以下命令,创建 profile 脚本(只需执行一次):

language-shell
cat > /etc/profile.d/10-platform-path.sh <<'EOF'
# Platform: keep SSH login PATH consistent with web terminal
path_prepend () { case ":$PATH:" in *":$1:"*) ;; *) PATH="$1:$PATH";; esac; }

path_prepend /usr/local/miniconda3/bin
path_prepend /usr/local/nvidia/bin
path_prepend /usr/local/cuda/bin
export PATH

# Optional: make `conda` command available (does NOT auto-activate base)
if [ -f /usr/local/miniconda3/etc/profile.d/conda.sh ]; then
  . /usr/local/miniconda3/etc/profile.d/conda.sh
fi
EOF

chmod 0644 /etc/profile.d/10-platform-path.sh

退出并重新 SSH 登录后验证:

language-bash
command -v nvcc && nvcc -V
command -v python && python -V
command -v conda

临时修复(仅当前 SSH 会话)

如果您只需要在当前 SSH 会话里临时使用工具链:

language-bash
export PATH="/usr/local/miniconda3/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH"
[ -f /usr/local/miniconda3/etc/profile.d/conda.sh ] && . /usr/local/miniconda3/etc/profile.d/conda.sh

信息

临时修复会在重连后失效。

常见问题

如何找到 SSH 登录密码?

只要在创建开发机实例启用了 SSH 登录密码,平台会自动生成初始密码。您可以进入开发机实例详情页复制 SSH 登录密码,或修改密码。

您无法查看他人创建的开发机实例的密码。

部分旧版开发机实例可能未启用 SSH 基于密码的认证方式,可使用「改配」功能启用该配置。但开发机实例内如果已添加 SSH 公钥,则优先基于密钥的认证。

警告

开发机实例 SSH 登录密码应在开发机实例详情页获取,不是 智算云平台的登录密码,请勿混淆。

如何添加 SSH 公钥?

如果在创建开发机实例时未上传 SSH 公钥,可参考以下方法:

  • 通过开发机实例「改配」功能添加 SSH 公钥。注意开发机实例改配后会重启。
  • 直接在开发机实例内添加 SSH 公钥。

开发机实例无法访问公网,如何安装 VSCode 或 Cursor?

如果开发机实例无法访问公网(例如部分可用区限制连接公网),有可能导致 VSCode 或 Cursor 无法顺利下载 Remote SSH 远程连接所需的 Server 端组件。

您可以手动安装 VSCoder / Cursor 的 Server 端组件。详见 VSCode 远程开发

无法与开发机实例建立 SSH 连接

如果无法与开发机实例建立 SSH 连接,请通过以下步骤检查问题。

检查开发机实例状态、IP、端口

  • 确认开发机实例已正常运行,处在「运行中」状态。
  • 确认开发机实例 IP 无误,请进入开发机实例详情页确认 IP。
  • 开发机实例 SSH 服务使用非标准端口,请进入开发机实例详情页确认端口号,确认您已在 SSH 命令或其他客户端工具中正确传入或配置该端口号。

检查开发机实例镜像

确认开发机实例镜像已包含平台要求的镜像基础组件。详见镜像基础组件要求

检查 SSH 配置

  1. 检查本地计算机的 SSH 私钥文件。是否在创建 SSH 密钥对时修改了默认的私钥文件名?

    • MacOS/Linux 私钥文件默认路径为: ~/.ssh/
    • Windows: C:\Users\<用户名>\.ssh\

    SSH 客户端一般在默认路径下按顺序寻找以下私钥文件。如果使用非默认私钥文件名,例如 id_rsa-mykey,可使用 SSH 的 -i 选项指定私钥文件,或在修改本地 SSH 配置文件。也可以重新生成 SSH 密钥对,并使用默认私钥文件名。

    language-bash
    id_rsa
    id_ecdsa
    id_ecdsa_sk
    id_ed25519
    id_ed25519_sk
    id_dsa
  2. 检查开发机实例内 SSH 的授权公钥文件(authorized_keys),确保开发机实例中已成功添加您的 SSH 公钥。输出开发机实例中授权公钥文件内容:

    language-bash
    cat ~/.ssh/authorized_keys

    cat 命令的输出结果中应包含您本地的 SSH 公钥(.pub 后缀)文件内容。

检查本地网络环境

部分网络环境由于安全考虑,会限制 SSH 远程连接外网的服务器,请检查本地网络环境是否允许 SSH 连接。

使用 nc 命令,其中 219.135.228.245 替换为您的开发机实例的 SSH IP 地址,41586 替换为开发机实例的 SSH 端口号。

language-bash
nc -vz 219.135.228.245 41586
Connection to 219.135.228.245 port 41586 [tcp/*] succeeded!

如果 nc 命令无法建立连接,请联系您的网络管理员。

自助排查问题

无法 SSH 远程连接开发机实例大部分原因为配置或网络问题,您可以通过命令行界面获取详细日志,自助排查。

您可以先获取 SSH 命令的错误输出。命令格式:

language-bash
ssh -vv -p port username@host_ip

执行命令时,请将其中 port 应替换为您开发机实例的 SSH 端口号,username 替换为您登录开发机实例的用户名,host_ip 替换为开发机实例的 SSH IP 地址。

获取详细日志后,通过大模型服务分析日志,获取可能的错误原因。

提示

如果您需要帮助,请联系商务或售后服务。