ssh 客户端命令
ssh是 OpenSSH 的远程登录客户端,用于安全连接远程主机、执行命令及配置端口/代理转发。
速查卡片
| 项目 | 内容 |
|---|---|
| 语法 | ssh [options] [user@]host [command] |
| 最简登录 | ssh user@host |
| 指定端口 | ssh -p 2222 user@host |
| 指定密钥 | ssh -i ~/.ssh/id_ed25519 user@host |
| 不执行命令 | ssh -N user@host(仅做端口转发时使用) |
| 强制 TTY | ssh -t user@host command |
| 后台运行 | ssh -f user@host command |
| 压缩传输 | ssh -C user@host |
| IPv4/IPv6 | ssh -4 / ssh -6 |
| 调试连接 | ssh -vvv user@host |
| 打印配置并退出 | ssh -G host |
| 查询算法 | ssh -Q cipher / ssh -Q kex / ssh -Q key |
| 多路复用控制 | ssh -O check host / ssh -O exit host |
| URI 格式 | ssh ssh://user@host:2222 |
| 配置文件 | ~/.ssh/config(见 配置与安全) |
概述
ssh 命令建立到远程主机的加密连接,提供交互式 shell 会话或执行指定命令。所有通信(包括密码验证)均经过加密,有效防御网络窃听和中间人攻击。
命令签名
bash
ssh [options] [user@]host [command [argument ...]]
ssh [options] ssh://[user@]host[:port]
ssh -Q query_option常用选项
连接与认证
| 选项 | 说明 |
|---|---|
-p port | 指定远程端口(默认 22) |
-i identity_file | 指定私钥文件(默认 ~/.ssh/id_ed25519 等) |
-l login_name | 指定登录用户名(同 ssh user@host) |
-F configfile | 指定配置文件(默认 ~/.ssh/config) |
-4 / -6 | 强制使用 IPv4 / IPv6 |
-b bind_address | 指定本地源地址 |
-B bind_interface | 绑定到指定网络接口 |
会话控制
| 选项 | 说明 |
|---|---|
-T | 禁止分配伪终端(适用于传输二进制数据) |
-t | 强制分配伪终端(多层 -tt 更强制) |
-N | 不执行远程命令(仅端口转发时使用) |
-f | 认证后转入后台运行 |
-s | 请求调用 SSH 子系统(如 sftp) |
-n | 将 stdin 重定向到 /dev/null |
调试与信息
| 选项 | 说明 |
|---|---|
-v / -vv / -vvv | 详细日志(DEBUG1/DEBUG2/DEBUG3) |
-V | 显示版本号并退出 |
-G | 解析配置文件并打印最终配置后退出 |
-q | 安静模式(抑制警告) |
-Q query_option | 查询支持的算法(cipher/key/kex/mac/sig 等) |
-E log_file | 将调试日志写入指定文件 |
数据与加密
| 选项 | 说明 |
|---|---|
-C | 启用压缩 |
-c cipher_spec | 指定加密算法优先级列表 |
-m mac_spec | 指定 MAC 算法优先级列表 |
-e escape_char | 设置转义字符(默认 ~,设为 none 禁用) |
端口转发、X11 与代理
| 选项 | 说明 |
|---|---|
-L [bind:]port:host:hostport | 本地端口转发 |
-R [bind:]port:host:hostport | 远程端口转发 |
-D [bind:]port | 动态端口转发(SOCKS 代理) |
-J [user@]host[:port] | 通过跳板机连接(ProxyJump) |
-W host:port | 标准输入/输出直接转发到指定 host:port |
-X | 启用 X11 转发 |
-Y | 启用可信 X11 转发 |
-x | 禁用 X11 转发 |
-A | 启用 ssh-agent 转发 |
-a | 禁用 ssh-agent 转发 |
-K / -k | 启用/禁用 GSSAPI 凭据转发 |
多路复用控制
| 选项 | 说明 |
|---|---|
-M | 进入主连接模式(连接共享) |
-S ctl_path | 指定控制套接字路径 |
-O ctl_cmd | 控制主连接(check/forward/exit/stop) |
-o option | 指定配置选项(格式同 ssh_config) |
-P tag | 指定配置标签 |
VPN/TUN 隧道
| 选项 | 说明 |
|---|---|
-w local_tun[:remote_tun] | TUN 设备转发(VPN) |
基础用法
示例一:最简登录
bash
# 以当前用户名登录
ssh 192.168.1.100
# 指定用户名
ssh root@192.168.1.100
# 使用 URI 格式
ssh ssh://root@192.168.1.100:2222示例二:远程命令执行
bash
# 执行单条命令
ssh user@host 'df -h'
# 执行管道命令(注意:管道在远程执行)
ssh user@host 'ls -la /var/log | grep error'
# 本地脚本传给远程执行
cat local_script.sh | ssh user@host bash
# 强制分配 TTY 以运行交互式程序
ssh -t user@host 'sudo systemctl restart nginx'示例三:后台运行与端口转发
bash
# 后台启动远程程序,同时做端口转发
ssh -f -N -L 3306:localhost:3306 user@host
# -f 后台运行
# -N 不执行远程命令
# -L 本地端口转发
# 后台启动 X11 程序
ssh -f user@host xterm示例四:调试连接问题
bash
# 逐级增加调试日志
ssh -v user@host # DEBUG1
ssh -vv user@host # DEBUG2
ssh -vvv user@host # DEBUG3(最详细)
# 查看最终生效的配置
ssh -G myserver
# 查询支持的密钥类型
ssh -Q key
# 查询支持的加密算法
ssh -Q cipher转义字符
当分配了伪终端(默认交互式会话),ssh 支持以下转义功能(默认转义字符 ~,必须在一行的开头输入):
| 转义序列 | 操作 |
|---|---|
~. | 立即断开连接 |
~^Z | 挂起 ssh 到后台 |
~# | 列出已转发的连接 |
~& | 等待转发/X11 会话结束后将 ssh 放入后台 |
~? | 显示转义命令帮助 |
~B | 向远端发送 BREAK 信号 |
~C | 打开命令菜单(添加/取消端口转发) |
~I | 显示当前 SSH 连接信息 |
~R | 请求重新密钥交换 |
~V / ~v | 调低/调高日志级别 |
转义命令菜单(~C 进入后)
bash
ssh> -L 8080:localhost:80 # 添加本地端口转发
ssh> -R 9090:localhost:3000 # 添加远程端口转发
ssh> -D 1080 # 添加动态端口转发
ssh> -KL 8080 # 取消本地端口转发
ssh> -KR 9090 # 取消远程端口转发
ssh> -KD 1080 # 取消动态端口转发
ssh> !command # 在本地执行命令
ssh> -h # 帮助连接复用(ControlMaster)
SSH 的 ControlMaster 功能允许在单个 TCP 连接上复用多个会话,大幅加速后续连接并减少认证开销。
配置(在 ~/.ssh/config 中添加)
Host *
ControlMaster auto
ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlPersist 10m控制命令
bash
# 检查主连接是否存活
ssh -O check myserver
# 显示主连接信息和通道
ssh -O conninfo myserver
ssh -O channels myserver
# 优雅退出主连接
ssh -O exit myserver
# 停止接收新的多路复用请求
ssh -O stop myserverX11 转发
X11 转发允许远程运行的图形程序在本地显示窗口。
bash
# 基本 X11 转发(受 X11 SECURITY 限制)
ssh -X user@host
# 可信 X11 转发(不受限制,更安全风险)
ssh -Y user@host
# 远程启动图形程序
ssh -X user@host firefox安全提示:-Y 将完全信任远程 X11 客户端。在不可信服务器上需谨慎使用。
退出码
ssh 以远程命令的退出码退出。如果连接或协议错误,退出码为 255。
环境变量
| 变量 | 说明 |
|---|---|
SSH_AUTH_SOCK | ssh-agent 套接字路径 |
SSH_CONNECTION | 连接四元组(客户端IP 客户端端口 服务端IP 服务端端口) |
SSH_TTY | 分配的伪终端路径 |
SSH_ASKPASS | 用于输入密码的 GUI 程序 |
DISPLAY | 被 ssh 自动设置,指向 X11 转发代理 |
注意事项
- 私钥文件权限必须为
600(仅用户可读写),否则ssh会忽略该密钥 ~/.ssh/config权限必须为600,否则会被忽略- 使用
-t强制分配 TTY 时,远程命令的输出可能被合并——管道处理时注意不能使用-t -A(Agent Forwarding)在不可信服务器上有安全风险,建议使用-J跳板模式替代
来源
| 来源 | 链接 |
|---|---|
| OpenSSH ssh(1) 手册 | https://man.openbsd.org/ssh |
| ssh_config(5) 手册 | https://man.openbsd.org/ssh_config |
