ssh客户端命令

ssh 命令参数(客户端),也就是你在终端执行 ssh user@host 时能用的各种选项。


ssh 命令常用参数整理

1. 基本连接

参数 说明 示例
ssh user@host 连接远程主机 ssh root@192.168.1.10
-p <port> 指定端口 ssh -p 2222 user@host
-i <identity_file> 指定私钥文件 ssh -i ~/.ssh/id_rsa user@host
-v 显示详细调试信息 ssh -v user@host
-vvv 显示更详细的调试日志(排错时用) ssh -vvv user@host

2. 认证与安全

参数 说明 示例
-o StrictHostKeyChecking=no 跳过 host key 检查(临时测试时用) ssh -o StrictHostKeyChecking=no user@host
-o UserKnownHostsFile=/dev/null 不记录已知主机文件 常与上面一起用
-o PreferredAuthentications=publickey,password 指定认证方式顺序

3. 端口转发(隧道)

参数 说明 示例
-L [本地地址:]本地端口:目标地址:目标端口 本地转发 ssh -L 8080:127.0.0.1:80 user@host
-R [远程地址:]远程端口:目标地址:目标端口 远程转发 ssh -R 9090:127.0.0.1:22 user@host
-D [本地地址:]本地端口 动态转发 (SOCKS 代理) ssh -D 1080 user@host

4. 连接与保持

参数 说明 示例
-C 启用压缩 ssh -C user@host
-N 不执行远程命令,只做转发 ssh -N -L 8080:127.0.0.1:80 user@host
-f 后台执行(常配合 -N ssh -f -N -L 8080:127.0.0.1:80 user@host
-T 禁止分配 TTY ssh -T git@github.com
-t 强制分配伪终端 ssh -t user@host "htop"
-o ServerAliveInterval=60 保持心跳包间隔 推荐防掉线
-o ServerAliveCountMax=3 最大未响应次数 常和上面一起用

5. 多跳与代理

参数 说明 示例
-J [user@]host[:port] 跳板机(ProxyJump) ssh -J userA@jump userB@target
-o ProxyCommand="..." 自定义代理命令 ssh -o ProxyCommand="nc -X 5 -x proxy:1080 %h %p" user@host

6. 其他实用参数

参数 说明 示例
-4 / -6 强制使用 IPv4 / IPv6 ssh -4 user@host
-q 静默模式(减少输出) ssh -q user@host
-X 开启 X11 转发 ssh -X user@host
-Y 开启可信的 X11 转发 ssh -Y user@host

7. 常见组合示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 带私钥文件的登录
ssh -i ~/.ssh/id_rsa user@192.168.1.10

# 本地转发数据库
ssh -L 63333:db.example.com:5432 user@ssh.example.com

# 动态转发 SOCKS5 代理
ssh -D 1080 -f -N user@host

# 跳板机多跳登录
ssh -J userA@jumphost userB@targethost

# 保持长连接避免掉线
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user@host

8.SSH 端口转发原理图

Local (-L)Remote (-R)Dynamic (-D) 的流向原理

mermaid-1757149256302.png


图解说明

  1. Local Forwarding (ssh -L)

    • 本地端口 → SSH 隧道 → 远程服务
    • 应用场景:本地访问远程数据库、Web 服务等。
  2. Remote Forwarding (ssh -R)

    • 远程端口 → SSH 隧道 → 本地服务
    • 应用场景:在跳板机上开放端口,让外部访问你本地服务。
  3. Dynamic Forwarding (ssh -D)

    • 本地 SOCKS 代理端口 → SSH 隧道 → 远程任意服务
    • 应用场景:类似 VPN,浏览器/程序通过 SOCKS 代理访问外部网络。