ssh 命令详解
个人博客区
3
帖子
1
发布者
115
浏览
-
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J destination] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-P tag] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination [command [argument ...]]ssh命令是 Linux/Unix 系统中用于安全远程登录的核心工具,其参数众多,功能强大。为了更清晰地理解,我将这些参数按照功能逻辑分为了 连接与身份、端口转发、认证与密钥、会话与调试 以及 版本与配置 五大类进行详细解释。
1. 连接、目标与身份
这些参数用于指定你要连接到哪里,以及以谁的身份登录。
参数 全称/含义 详细解释 destination 目标主机 核心参数,指定要连接的远程主机。格式通常为 [user@]hostname。[command] 执行命令 如果指定,将在远程主机上执行该命令后退出,而不是启动交互式 shell。 -p port端口 指定远程 SSH 服务监听的端口号(默认是 22)。 -l login_name登录名 指定登录远程主机的用户名(例如 ssh -l root host)。-4仅 IPv4 强制 SSH 仅使用 IPv4 地址进行连接。 -6仅 IPv6 强制 SSH 仅使用 IPv6 地址进行连接。 -J destination跳板/代理跳转 通过一个或多个跳板机(Jump Host)连接到最终目标(例如 ssh -J user@gateway user@final)。2. 端口转发与隧道
SSH 不仅仅是登录,还可以作为安全隧道传输其他数据。
参数 全称/含义 详细解释 -L本地端口转发 将本地的某个端口流量通过 SSH 隧道转发到远程主机的某个地址和端口(例如 -L 8080:localhost:80,本地访问 8080 即访问远程的 80 端口)。-R远程端口转发 将远程主机的某个端口流量通过 SSH 隧道转发回本地(例如 -R 9000:localhost:80,远程访问 9000 即访问本地的 80 端口)。-D动态端口转发 开启 SOCKS 代理服务器。指定本地一个端口,所有发往该端口的流量都会通过 SSH 隧道动态转发。 -g网关端口 允许远程主机连接到本地转发的端口(默认情况下,端口转发仅绑定到 localhost,使用此参数可让其他机器连接)。 -wTUN/TAP 隧道 用于转发网络层(Layer 3)或链路层(Layer 2)的数据包,常用于构建 VPN。 3. 认证、密钥与代理
这些参数控制如何证明你的身份。
参数 全称/含义 详细解释 -i identity_file身份文件 指定用于公钥认证的私钥文件(默认是 ~/.ssh/id_rsa等)。-A启用代理转发 允许将本地的 SSH 代理(ssh-agent)连接转发到远程主机。注意: 这有安全风险,因为远程用户可能利用你的本地密钥进行跳板攻击。 -a禁用代理转发 禁止转发认证代理的连接(默认行为)。 -KGSSAPI 委托 启用基于 GSSAPI(如 Kerberos)的身份验证和凭据转发。 -k禁用 GSSAPI 禁用向服务器转发 GSSAPI 凭据。 -I pkcs11智能卡/PKCS#11 指定用于与智能卡通信的 PKCS#11 共享库,用于硬件密钥认证。 4. 会话、控制与调试
控制终端行为、连接管理和故障排查。
参数 全称/含义 详细解释 -t强制伪终端 强制分配一个伪终端(PTY)。当你需要在远程运行基于屏幕的程序(如 top、vim或菜单脚本)时非常有用。-T禁止分配终端 禁止分配伪终端。适用于执行自动化脚本或传输文件时,防止远程系统分配不必要的资源。 -f后台运行 请求 SSH 在执行命令前转入后台运行(通常与 -n配合使用)。-n重定向 stdin 将标准输入重定向到 /dev/null。通常用于后台运行,防止 SSH 从标准输入读取数据。-N不执行命令 不在远程执行任何命令。通常仅用于端口转发( -L/-R)时,只建立隧道而不打开 shell。-v冗详模式 显示详细的调试信息。 -v显示一级信息,-vvv显示最详细信息,用于排查连接失败原因。-q安静模式 抑制大部分警告和诊断信息,让输出更干净。 -e escape_char转义字符 设置用于退出 SSH 会话的控制字符(默认是 ~)。例如-e none会使会话完全透明,禁用转义功能。-C压缩数据 启用压缩(类似 gzip),在慢速网络下可以加速传输,但会增加 CPU 负担。 -S ctl_path控制套接字 指定用于连接共享(Connection Multiplexing)的控制套接字路径,允许复用同一个 TCP 连接以加快后续连接速度。 5. 配置与加密
指定配置文件和加密算法。
参数 全称/含义 详细解释 -F configfile配置文件 指定一个替代的用户级配置文件(默认是 ~/.ssh/config),而不是使用系统默认配置。-o option配置选项 以 Key=Value的形式传递配置指令(例如ssh -o "StrictHostKeyChecking=no" host),用于设置没有单独命令行开关的选项。-c cipher_spec加密算法 指定会话加密的密码算法(如 aes256-ctr)。OpenSSH 会自动协商,通常无需手动指定。-m mac_specMAC 算法 指定消息认证码(Message Authentication Code)算法,用于确保数据完整性。 -B bind_interface绑定接口 在多网卡机器上,指定从哪个本地网络接口发出连接。 -b bind_address绑定地址 在多 IP 地址的机器上,指定连接的源 IP 地址。 -E log_file日志文件 将调试日志追加到指定文件中,而不是输出到标准错误 stderr。
补充说明- 大小写敏感:注意
-v(小写)是详细模式,而-V(大写)是显示版本信息并退出。 - 参数优先级:命令行参数的优先级最高,其次是用户配置文件 (
~/.ssh/config),最后是系统配置文件 (/etc/ssh/ssh_config)。 - 安全性:使用
-A(代理转发)时要非常小心,因为它可能让远程服务器上的恶意用户利用你的本地私钥访问其他服务器。
- 大小写敏感:注意
-
按字母顺序排列的详解速查:
SSH 客户端参数详解
ssh(Secure Shell) 是一个用于安全远程登录和执行命令的工具。以下参数基于 OpenSSH 客户端。常用参数概览
ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J destination] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-P tag] [-p port] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination [command [argument ...]] ssh [-Q query_option]参数详细说明
参数 说明 -4 强制使用 IPv4 地址。 -6 强制使用 IPv6 地址。 -A 启用认证代理转发。允许远程主机通过本地 SSH 代理进行认证。 -a 禁止认证代理转发。 -C 启用压缩。所有数据在传输前都会被压缩。 -f 后台运行。SSH 会在执行命令前转入后台,通常与 -n配合使用。-g 允许远程主机连接本地转发的端口。如果不使用此选项,端口转发仅绑定到本地回环地址。 -i identity_file 指定用于公钥认证的私钥文件路径(例如 ~/.ssh/id_rsa)。-l login_name 指定登录远程主机的用户名。 -N 不执行远程命令。仅用于端口转发。 -n 将标准输入重定向到 /dev/null。通常用于后台运行 SSH。-p port 指定远程 SSH 服务监听的端口号(默认为 22)。 -q 静默模式。抑制所有警告和诊断信息。 -t 强制分配伪终端。对于运行全屏程序(如 top或文本菜单)非常有用。-v 详细模式。打印调试信息。可使用多个 -v(如-vvv)以增加详细程度。-X 启用可信的 X11 转发。 -x 禁用 X11 转发。 -Y 启用可信的 X11 转发(比 -X更宽松的信任级别)。-y 启用信任的 X11 转发(与 -Y类似,具体行为可能依赖于实现)。-B bind_interface 指定 SSH 客户端发送数据包的网络接口。 -b bind_address 在本地主机上绑定指定的源地址(源 IP)发出连接。 -c cipher_spec 指定用于加密会话的加密算法。 -D [bind_address:]port 指定本地动态应用程序级端口转发。SSH 将充当 SOCKS 代理服务器。 -E log_file 将调试日志追加到指定的文件中。 -e escape_char 设置转义字符(默认为 ~)。-F configfile 指定一个替代的配置文件(默认为 ~/.ssh/config)。-I pkcs11 指定 PKCS#11 共享库的路径,用于硬件安全密钥。 -J destination 指定跳转主机(Jump Host)。格式为 [user@]host[:port],可指定多个。-L address 指定本地端口转发。将本地端口映射到远程主机的某个端口。 -m mac_spec 指定用于数据完整性校验的消息认证码(MAC)算法。 -O ctl_cmd 控制一个正在运行的 SSH 多路复用主进程(如 check,exit,stop)。-o option 以 选项=值的形式指定配置选项(如-o StrictHostKeyChecking=no)。-P tag 与 -Q一起使用,用于查询特定的配置参数。-R address 指定远程端口转发。将远程主机的端口映射到本地主机的某个端口。 -S ctl_path 指定用于连接共享的控制套接字路径。 -W host:port 将本地标准输入输出直接连接到远程主机的指定端口。 -w local_tun[:remote_tun] 请求 TUN/TAP 接口转发,用于创建虚拟专用网络(VPN)。 -Q query_option 查询可用的加密算法、MAC 等信息(如 ssh -Q cipher)。使用示例
- 基本连接:
ssh user@hostname - 指定端口:
ssh -p 2222 user@hostname - 本地端口转发:
ssh -L 8080:localhost:80 user@hostname(将本地 8080 转发到远程的 80) - 动态端口转发(SOCKS 代理):
ssh -D 1080 user@hostname - 后台运行并静默:
ssh -f -N -L 8080:localhost:80 user@hostname
- 基本连接: