ssh

登录服务器、执行命令,以及建立加密隧道。

执行前须知

首次连接时,应通过可信渠道核对主机密钥指纹。-N 只建立转发,不启动远程命令;下列前台隧道可按 Ctrl+C 停止。-L 的目标由 SSH 服务器解析和访问;-R 的目标由本机访问。远程监听仍受服务器转发策略约束,回环绑定还受 GatewayPorts 影响。ExitOnForwardFailure 检查初始转发设置,并不保证后续每个目标都可达。-D 提供 SOCKS,并非 VPN,需要客户端自行配置,支持时还应配置远程 DNS。详细日志可能含地址、用户名及密钥路径,分享前请脱敏。

使用示例

登录远程账号;首次连接会核对主机密钥,并进行身份认证。

ssh alice@server.example.com

指定 2222 端口和身份文件;IdentitiesOnly 限制提供的身份。

ssh -p 2222 -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes alice@server.example.com

通过跳板机访问目标服务器(ProxyJump/-J)。

ssh -J alice@bastion.example.com alice@internal.example.com

本地转发:本机 15432 端口经服务器访问远程数据库。

ssh -N -L 127.0.0.1:15432:db.internal.example.com:5432 -o ExitOnForwardFailure=yes alice@server.example.com

远程转发:服务器回环地址的 18080 端口访问本机 8080。

ssh -N -R 127.0.0.1:18080:127.0.0.1:8080 -o ExitOnForwardFailure=yes alice@server.example.com

在 127.0.0.1:1080 创建本地 SOCKS 监听。

ssh -N -D 127.0.0.1:1080 -o ExitOnForwardFailure=yes alice@server.example.com

输出详细诊断日志,将建立连接的超时设为 10 秒。

ssh -vvv -o ConnectTimeout=10 alice@server.example.com

依次经过两台跳板机连接目标。客户端分别认证每一跳,并须核验每台主机密钥。

ssh -J alice@jump1.example.com,alice@jump2.example.com alice@target.example.com

查看 Host 和 Include 匹配后实际生效的客户端配置;输出可能包含敏感连接信息。

ssh -G alice@server.example.com

执行一条远程命令后返回本地终端;请按远程 shell 的规则正确引用命令。

ssh alice@server.example.com 'uptime'

创建并复用连接、检查状态,然后关闭主连接。确保 ~/.ssh 仅本人可访问;关闭主连接也会关闭依赖它的会话。

ssh -M -S ~/.ssh/securepipes-%C -o ControlPersist=10m -fN alice@server.example.com
ssh -S ~/.ssh/securepipes-%C alice@server.example.com
ssh -S ~/.ssh/securepipes-%C -O check alice@server.example.com
ssh -S ~/.ssh/securepipes-%C -O exit alice@server.example.com

列出可查询的类别、密钥算法和加密算法。客户端支持不代表服务器接受。

ssh -Q help
ssh -Q key
ssh -Q cipher

查询 known_hosts 中的记录及指纹。只有通过独立可信渠道确认密钥变更后才删除;主机名和端口格式必须准确。

ssh-keygen -F server.example.com -l
ssh-keygen -R server.example.com

为脚本启用非交互模式和连接超时;须事先配置认证和主机信任,遇到交互提示时会失败。

ssh -o BatchMode=yes -o ConnectTimeout=10 alice@server.example.com

使用 ProxyCommand 和 -W 经跳板机连接目标;通常 ProxyJump 更简单,须核验两台主机密钥。

ssh -o 'ProxyCommand=ssh -W %h:%p alice@bastion.example.com' alice@target.example.com

在服务器回环地址创建 SOCKS 监听端口。服务器上的其他本地用户或进程也可能访问;服务器策略必须允许转发。

ssh -N -R 127.0.0.1:1080 -o ExitOnForwardFailure=yes alice@server.example.com

设置加密的 SSH 保活探测和连接超时,用于检测无响应的对端,但不保证自动重连。

ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 -o ConnectTimeout=10 alice@server.example.com

参数与示例

-p port常用

连接到指定的服务器端口。

示例
ssh -p 2222 alice@server.example.com
-i identity_file常用

使用指定的私钥文件;保护它并且永远不要分享它。

示例
ssh -i ~/.ssh/id_ed25519 alice@server.example.com
-l login_name

指定远程登录名。

示例
ssh -l alice server.example.com
-J destination常用

通过 SSH 跳板机连接。

示例
ssh -J alice@bastion.example.com alice@internal.example.com
-L address:port:host:hostport常用

将本地监听端口转发到由 SSH 服务器访问的目标。

示例
ssh -N -L 127.0.0.1:15432:db.internal.example.com:5432 alice@server.example.com
-R address:port:host:hostport常用

将远程监听端口转发到由本地电脑访问的目标。服务器策略可能限制监听地址。

示例
ssh -N -R 127.0.0.1:18080:127.0.0.1:8080 alice@server.example.com
-D address:port常用

创建本地 SOCKS 侦听器。配置每个客户端以使用它;这不是 VPN。

示例
ssh -N -D 127.0.0.1:1080 alice@server.example.com
-N常用

不执行远程命令,适用于仅需端口转发的连接。

示例
ssh -N -D 127.0.0.1:1080 alice@server.example.com
-o option=value常用

为此调用设置 ssh_config 选项。转发设置成功并不能保证稍后可以到达目的地。

示例
ssh -o ExitOnForwardFailure=yes alice@server.example.com
-F configfile

使用备用客户端配置文件。

示例
ssh -F ~/.ssh/lab_config alice@server.example.com
-v / -vvv常用

打印诊断输出;更多 v 字符可增加细节。日志可能包含敏感的连接信息。

示例
ssh -vvv alice@server.example.com
-4 / -6

分别仅使用 IPv4 或仅使用 IPv6。

示例
ssh -4 alice@server.example.com
-C

请求压缩。它可能无法改善已经压缩的流量。

示例
ssh -C alice@server.example.com
-T / -t

分别禁用或请求伪终端。

示例
ssh -t alice@server.example.com
-A

启用 SSH 认证代理转发。被攻陷的远程主机可以通过代理请求签名;仅对可信主机使用。

示例
ssh -A alice@server.example.com
-G

根据 Host 和 Match 规则输出实际生效的客户端配置。

示例
ssh -G lab
-V

打印已安装的 SSH 客户端版本。

示例
ssh -V

权威参考

核对日期:2026 年 10 月 27 日