基本连接参数
这些是日常使用中最核心、最常用的参数。

(图片来源网络,侵删)
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-l |
login_name |
指定登录的用户名。 | ssh -l user 192.168.1.100 |
-p |
port |
指定连接的端口号(默认是 22)。 | ssh -p 2222 user@hostname |
-i |
identity_file |
指定私钥文件进行身份验证。 | ssh -i ~/.ssh/my_key user@host |
-F |
configfile |
指定一个非默认的 SSH 配置文件。 | ssh -F ~/.ssh/custom_config my_server |
认证与安全参数
这些参数控制身份验证的方式和安全级别。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-o |
option |
这是最强大的参数,可以覆盖配置文件中的任何设置,可以多次使用。 | ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" user@host |
-o UserKnownHostsFile |
- | 指定 known_hosts 文件的路径,用于自定义或禁用主机密钥验证。 |
ssh -o "UserKnownHostsFile=/dev/null" user@host |
-o StrictHostKeyChecking |
- | 设置是否严格检查主机密钥。yes (默认), no, ask。no 会自动接受新密钥,存在安全风险。 |
ssh -o "StrictHostKeyChecking=no" user@host |
-o PasswordAuthentication |
- | 禁用或启用密码认证,常与密钥认证结合使用。 | ssh -o "PasswordAuthentication=no" user@host |
-o PubkeyAuthentication |
- | 禁用或启用公钥认证。 | ssh -o "PubkeyAuthentication=no" user@host |
-o ConnectTimeout |
- | 设置连接超时时间(秒)。 | ssh -o "ConnectTimeout=5" user@host |
-o ServerAliveInterval |
- | 如果服务器长时间无响应,客户端会发送一个 "keepalive" 包(单位:秒),防止连接被中间网络设备断开。 | ssh -o "ServerAliveInterval=60" user@host |
-o ServerAliveCountMax |
- | 设置 ServerAliveInterval 的最大尝试次数。 |
ssh -o "ServerAliveInterval=60" -o "ServerAliveCountMax=3" user@host |
-X |
- | 启用 X11 转发,允许你在远程机器上运行图形界面程序,并显示在本地。 | ssh -X user@host |
-Y |
- | 启用受信任的 X11 转发,比 -X 权限更高,安全性稍低,但兼容性更好。 |
ssh -Y user@host |
连接行为与调试参数
这些参数用于控制连接过程和进行故障排查。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-v |
verbose |
详细模式,打印出调试信息,可以重复使用(如 -vv, -vvv)来增加详细程度,排查连接问题时非常有用。 |
ssh -vv user@host |
-q |
quiet |
安静模式,不显示警告和诊断信息。 | ssh -q user@host |
-C |
compression |
启用压缩,对于低速网络或传输文本文件可以提高速度。 | ssh -C user@host |
-N |
no-shell |
不执行远程命令,通常用于端口转发,只建立连接通道。 | ssh -N -L 8080:localhost:80 user@host |
-f |
background |
在后台运行,与 -N 或远程命令结合使用,将 ssh 放入后台执行。 |
ssh -f -N -L 8080:localhost:80 user@host |
-g |
gateway_ports |
允许远程主机连接到本地转发的端口,默认情况下,本地转发端口只绑定在 localhost 上,此参数允许绑定在 0.0.0 上。 |
ssh -g -L 8080:localhost:80 user@host |
-4 |
ipv4 |
强制使用 IPv4 地址进行连接。 | ssh -4 user@host |
-6 |
ipv6 |
强制使用 IPv6 地址进行连接。 | ssh -6 user@host |
-T |
disable-pty |
禁用伪终端分配,当你只想在远程机器上执行命令而不需要交互式 shell 时很有用。 | ssh -T user@host "ls -l" |
端口转发 (隧道)
这是 SSH 的一个强大功能,可以在不安全的网络上安全地传输其他协议的数据。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-L |
localport:host:hostport |
本地转发,将本地机器的一个端口转发到远程机器的某个端口,格式:[bind_address:]port:host:hostport |
ssh -L 8080:remote_web_server:80 user@gateway (访问本地 8080 端口,流量会通过网关服务器到达远程 Web 服务器的 80 端口) |
-R |
remoteport:host:hostport |
远程转发,将远程机器的一个端口转发到本地机器的某个端口,格式:[bind_address:]port:host:hostport |
ssh -R 8080:localhost:80 user@gateway (在网关服务器上访问 localhost:8080,流量会通过 SSH 连接到达你本地的 80 端口) |
-D |
port |
动态 SOCKS 代理,创建一个 SOCKS 代理服务器,你的应用程序(如浏览器)可以通过它安全地访问网络。 | ssh -D 1080 user@gateway (本地 1080 端口成为一个 SOCKS 代理) |
实用技巧与常见组合
-
快速连接:在
~/.ssh/config文件中配置别名,避免每次都输入长串命令。
(图片来源网络,侵删)# ~/.ssh/config Host myserver HostName 192.168.1.100 User myuser Port 2222 IdentityFile ~/.ssh/my_key ServerAliveInterval 60之后只需执行
ssh myserver即可。 -
执行单条远程命令:直接在命令后跟要执行的命令。
ssh user@host "ls -l /tmp"
-
安全地传输文件:虽然
scp和sftp是专门的文件传输工具,但它们底层就是 SSH。# 使用 scp (基于 ssh) scp -r /path/to/local/dir user@host:/path/to/remote/dir # 使用 sftp (交互式) sftp user@host sftp> put file.txt
-
调试连接问题:如果连接失败,使用
-v查看详细信息。
(图片来源网络,侵删)ssh -vv user@host
输出会显示 DNS 解析、TCP 连接、密钥交换、认证等每一步的详细信息,是定位问题的利器。
-
避免输入密码:通过
ssh-keygen生成密钥对,然后将公钥(~/.ssh/id_rsa.pub)复制到远程服务器的~/.ssh/authorized_keys文件中,即可实现免密登录。 -
临时跳板机连接:当目标服务器无法直接访问,但可以通过一台跳板机(网关)访问时:
# 方法1:使用 -J (Jump Host) 参数 (OpenSSH 7.3+ 推荐) ssh -J jump_user@jump_host target_user@target_host # 方法2:老方法,在 ~/.ssh/config 中配置 ProxyCommand Host target_host User target_user HostName target_host_ip ProxyCommand ssh jump_user@jump_host -W %h:%p
希望这份详细的列表能帮助你更好地掌握 ssh 命令!
