Skip to content

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(仅做端口转发时使用)
强制 TTYssh -t user@host command
后台运行ssh -f user@host command
压缩传输ssh -C user@host
IPv4/IPv6ssh -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 myserver

X11 转发

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_SOCKssh-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