Linux ssh 命令:远程登录、执行命令与核对主机指纹

ssh 是 OpenSSH 的远程登录客户端,可通过加密连接登录服务器或执行一次远程命令。连接前要确认目标、账号和端口,并通过独立可信渠道核对服务器主机密钥指纹;加密本身不能替代服务器身份确认。

SSH 是 Secure Shell(安全外壳协议)。主机密钥用于确认服务器身份,用户密码或用户密钥用于证明登录者身份,两者不可混淆。以下域名与账号都是示例,运行时必须替换为自己管理或获准使用的服务器信息。

基本语法与连接准备

ssh [options] [user@]host [remote command]

user 是远程账号,host 是目标主机,remote command 是可选远程命令。省略账号时,客户端配置可能指定其他用户;不能默认认为与当前终端身份相同。先用 ssh -V 和 man ssh 核对本机版本,并从管理员处取得目标地址、SSH 端口、认证方式及可信指纹。

客户端配置通常来自命令行、用户配置及系统配置,主机别名还可能改变真正连接的地址。需要核对生效值时,可按本机手册使用 -G 输出配置后退出;自己的配置可能含有条件命令,因此不要把读取未知配置当成完全无副作用的操作。

登录、端口与一次性命令

登录远程账号。

ssh alice@server.example.com

目标须运行 SSH 服务,并允许该账号及所选认证方式。可能先出现主机指纹确认,再要求账号密码或私钥口令;密码输入时不回显通常是正常现象。登录后提示符属于远程环境,执行文件或进程操作前应再次确认所在主机。

连接管理员指定的非默认端口。

ssh -p 2222 alice@server.example.com

小写 -p 指定目标 SSH 端口,默认通常是 22;2222 只是示例。这不会修改服务器监听端口或防火墙规则。连接失败时,先核对实际配置,不要通过关闭校验或不断更换端口猜测目标。

执行一次远程命令。

ssh alice@server.example.com hostname

这里在远端执行 hostname,预期返回远程主机名后结束会话,不是读取本机名称。命令及附加参数会组成发送到服务端的命令行,复杂引号、变量、通配符可能涉及本地与远程 shell 两次解释;不要将不可信输入直接拼接进去。

远程命令结束时,ssh 通常返回该命令的退出状态;SSH 自身出错时返回 255,但远程程序也可能使用相同值,因此仍须结合错误信息。交互登录结束可运行 exit。断开连接不保证所有远程后台任务都停止,长任务应按实际进程管理方式确认。

首次连接怎样核对主机指纹

向管理员通过独立可信渠道取得正确主机、端口和密钥类型的指纹后,再发起连接。不要只凭当前连接自己显示的字符串证明当前连接可信:

ssh user@server.example.test

首次遇到未知主机密钥时,可能出现以下格式。省略号只是指纹占位符,不能用于实际比对;server.example.test 也不是可直接使用的生产地址:

The authenticity of host 'server.example.test' can't be established.
ED25519 key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?

确认密钥类型与完整 SHA256 指纹一致后才批准。默认交互策略下,yes 通常将该主机密钥写入用户的 ~/.ssh/known_hosts;受管理的证书、系统已知主机文件或其他策略也可能使流程不同。没有弹出提示,不等于已经通过人工核验。

管理员可从服务器控制台用 ssh-keygen -l -E sha256 -f /etc/ssh/ssh_host_ed25519_key.pub 读取相应公钥的指纹,再安全地提供给用户;其他主机密钥类型应使用对应文件。这里读取的是服务器公钥,不需要把服务器私钥发给任何客户端。

ssh-keyscan 可以收集网络返回的公钥,但它自身不验证密钥真实性。未经独立核对就直接加入 known_hosts,仍可能信任冒充服务器。以后若出现密钥改变警告,先调查重装、合法轮换、地址变化或攻击可能;确认前不删除旧记录,也不关闭主机校验。

常用选项与密钥管理

选项格式 用途与边界
-p port 选择目标 SSH 端口,不改变服务器设置。
-i keyfile 选择身份密钥文件,不代表只会尝试这一把密钥。
-J jump_host 通过跳板建立到最终目标的连接;跳板配置需分别核对。
-L local_port:host:port 本地监听后,经 SSH 从远程一侧连接指定目标。
-N 不运行远程命令,常用于只建立转发通道。
-v 输出连接与认证诊断,分享前检查敏感信息。

-i 可以与代理及其他已配置身份共同生效;需要限制身份来源时,可按策略考虑 IdentitiesOnly=yes。私钥由本地妥善保管,限制权限并保护备份,不能与服务器主机公钥或准备上传的用户公钥混为一谈。Linux 私钥权限规则也不能照搬为 Windows ACL 的完整操作方法。

-L 的 host:port 是由远程 SSH 服务器一侧发起连接的目标,不一定指客户端本机。使用时应明确绑定地址,例如 127.0.0.1,而不是假设省略后永远只允许本机;绑定到所有接口会改变服务暴露范围。SSH 加密通道到远程 SSH 端为止,之后到转发目标的连接不会自动获得相同加密保护。

本地解析验证:2026-11-05 在 Windows Git 的 OpenSSH 10.3p1 中,以 -G -F none 排除现有配置,确认示例账号、默认 22、指定 2222、身份限制、严格主机校验和回环转发参数能被解析。-N 对应不建立远程命令会话。该检查没有连接服务器、读取用户密钥或建立转发监听,不能代替 Linux 上的认证与端到端测试。

按连接阶段定位失败

  1. 先核对目标和解析结果;名称错误与 TCP 超时、拒绝不是同一问题。必要时结合 nc 的 TCP 端口检查,但端口可达仍不证明 SSH 身份或认证正确。
  2. 核对服务器 SSH 服务、端口和主机指纹。密钥改变警告属于身份确认问题,不用删除 known_hosts 或关闭校验来“修复”。
  3. 身份确认通过后再检查远程账号、允许的认证方式、所用私钥及权限。Permission denied 不一定表示密码输错,也可能是账号、策略或密钥不匹配。
  4. 用 -v 收集阶段线索,分享前隐藏用户名、主机名、地址和本地路径等信息;不发布私钥、口令或未经检查的完整日志。验证完成后退出会话,并确认不再需要的转发监听已经结束。

常见问题

服务器密钥改变的警告可以直接忽略吗?

不可以。合法重装或轮换与冒充都可能导致变化。先通过独立可信渠道核对新指纹、目标与变更原因,再按组织流程更新对应记录,避免批量删除其他主机的信任信息。

官方文档

命令行为见 OpenSSH ssh 手册;身份选择、主机校验与配置规则见 ssh_config 手册。指纹读取及公钥收集的区别参阅 ssh-keygen 与 ssh-keyscan 官方说明。