SSH 隧道(SSH 常用命令行参数详解:从能连上到玩出花)

SSH 隧道(SSH 常用命令行参数详解:从能连上到玩出花)
SSH 常用命令行参数详解:从能连上到玩出花

一、最基础:先把服务器连上

ssh user@hostssh user@host -p 2222

user@host:用户名 + 主机(IP 或域名)

-p :指定端口(只要不是 22,必用)

这一步没啥技术含量,但80% 的排障,都是从这里失败开始的


二、身份认证相关:你每天都在用,但未必用对

1️⃣ -i:指定私钥(使用频率 TOP 1)

ssh -i ~/.ssh/id_rsa user@host

典型场景

多云厂商(阿里云 / AWS / GCP)

多账号环境(prod / staging / test)

CI/CD 自动化

如果你还在靠记忆「这台机器用哪把钥匙」,那你真的该看看 ~/.ssh/config 了(后面会讲)。


2️⃣ -l:显式指定用户名

ssh -l root host

等价于:

ssh root@host

用得不多,但在脚本和模板里偶尔很清爽。


3️⃣ -o PreferredAuthentications

ssh -o PreferredAuthentications=publickey user@host

作用

禁用密码登录

排查「为什么 SSH 老是要我输密码」

很多“玄学 SSH 问题”,其实只是认证顺序不对。


三、调试排错:SSH 连不上?先别慌

-v / -vv / -vvv:真正的救命参数

ssh -vvv user@host

等级说明:

-v:基础连接信息

-vv:认证流程细节

-vvv:

经验法则

SSH 连不上,不加 -vvv 看日志,等于在黑屋子里修车。


四、端口转发:SSH 的隐藏王炸能力

很多人不知道,SSH 本质上是一个安全隧道工具

1️⃣ -L:本地端口转发(最常见)

ssh -L 8080:127.0.0.1:80 user@host

含义是:

本地 8080 → SSH 隧道 → 远端 127.0.0.1:80

真实使用场景

本地访问远端数据库

调试内网 Web 服务

SSH 隧道(SSH 常用命令行参数详解:从能连上到玩出花)

绕过防火墙做临时运维


2️⃣ -R:远程端口转发(反向隧道)

ssh -R 9000:localhost:3000 user@host

含义:

远端 host:9000

实际访问的是你本地的 3000 端口

典型用途

内网机器暴露服务

早期 / 轻量版“内网穿透”方案


3️⃣ -D:SOCKS 代理(很多人低估了它)

ssh -D 1080 user@host

本地开启一个 SOCKS5 代理

浏览器 / curl / git 都能走

一句话总结:

SSH = VPN Lite(而且极其稳定)


五、连接行为控制:自动化与稳定性的关键

-N:不执行远程命令

ssh -N -L 3306:127.0.0.1:3306 user@host

只做端口转发

不打开 shell

非常适合:

长时间隧道

后台运行


-T / -t:是否分配 TTY

ssh -T user@host   禁用伪终端ssh -t user@host   # 强制分配伪终端

记住一个点就够了

sudo / 交互命令 → 用 -t

CI / 脚本 → 用 -T


-q:安静模式

ssh -q user@host

不输出 banner

非常适合脚本


⏱ -o ConnectTimeout

ssh -o ConnectTimeout=5 user@host

防止:网络抖动、自动化流程被 SSH 卡死


六、性能与稳定性:线上环境真有用

⚡ -C:启用压缩

ssh -C user@host

低带宽、高延迟网络 → 有收益

高带宽、CPU 忙 → 未必划算


❤️ 保活参数(防止莫名断连)

ssh \  -o ServerAliveInterval=30 \  -o ServerAliveCountMax=3 \  user@host

含义:

每 30 秒发一次心跳

连续 3 次失败才断开


七、执行远程命令:脚本与自动化必备

ssh user@host "uptime"

多命令示例:

ssh user@host << 'EOF'cd /opt/appgit pullsystemctl restart appEOF

很多“运维系统”,底层其实就是 SSH + Shell。


八、安全相关参数:知道就已经超过 80% 的人

StrictHostKeyChecking

ssh -o StrictHostKeyChecking=no user@host

用途:CI/CD、首次连接不交互、⚠️生产环境慎用


UserKnownHostsFile

ssh -o UserKnownHostsFile=/dev/null user@host

不写 known_hosts、容器 / 临时环境非常常见


九、真正的终极形态:~/.ssh/config

很多参数,根本不该写在命令行里

示例:

Host prod  HostName 10.0.0.12  User deploy  Port 2222  IdentityFile ~/.ssh/prod_rsa  ServerAliveInterval 30

此后你只需要:

ssh prod

这是从「会用 SSH」到「用好 SSH」的分水岭。


十、一个实战万能模板

ssh -i ~/.ssh/id_rsa \    -p 2222 \    -C \    -o ServerAliveInterval=30 \    -o ServerAliveCountMax=3 \    -vv \    user@host

写在最后

SSH 表面上只是一个登录工具,但往深了看,它是:安全通信协议、隧道工具、自动化基石、很多内网方案的底座。如果你真正吃透了 SSH,你会发现:

很多“复杂系统”,其实都能退化成 SSH 问题。

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有