SSH 是每个 Linux 用户每天都用的工具,但多数人只用了它 10% 的能力。本文讲三件能立刻提升效率和安全的事:密钥认证、端口转发、tmux 会话保持。
第一步:换掉密码登录
密码登录暴露在公网上,等于把门交给全世界的爆破脚本。密钥认证则是「你有一把私钥,服务器存着公钥」,即使密码泄露也进不来。
# 本地生成密钥(ed25519 是当前推荐算法,更短更快)ssh-keygen -t ed25519 -C "alice@laptop"
# 把公钥推送到服务器(仍需密码登录一次)验证 ssh [email protected] 免密登录成功后,再修改服务器 /etc/ssh/sshd_config 加固:
PasswordAuthentication no # 关闭密码登录PermitRootLogin no # 禁止 root 直连PubkeyAuthentication yes私钥设置强口令(passphrase)+ ssh-agent 缓存,兼顾安全与便利:
eval "$(ssh-agent -s)"ssh-add ~/.ssh/id_ed25519 # 输一次口令,本次会话内免密免敲长命令:~/.ssh/config
本地 ~/.ssh/config 可以给每台服务器起别名、指定端口和密钥:
Host prod HostName 203.0.113.20 User alice Port 2222 IdentityFile ~/.ssh/id_ed25519
Host db-via-prod HostName 10.0.1.15 User dba ProxyJump prod之后 ssh prod 即可登录;ssh db-via-prod 通过 prod 作跳板直连内网数据库服务器——ProxyJump(-J)替代了手动两段跳转。
端口转发的三种形态
本地转发(-L):把远端服务「搬到」本地端口。场景:数据库只在服务器内网监听 3306,本地想用 GUI 客户端连接:
ssh -L 13306:127.0.0.1:3306 prod -N# 本地连接 127.0.0.1:13306,流量经 SSH 隧道到 prod 的 3306-N 表示只转发不开 shell。语义记忆:-L 本地端口:目标(从SSH服务器视角):目标端口。
远程转发(-R):把本地服务「暴露」给远端。场景:本地开发了一个 webhook 接收服务,想让外部测试环境回调:
ssh -R 9090:127.0.0.1:3000 prod -N# 访问 prod 的 9090 端口 = 访问你本地的 3000注意服务器默认只把转发端口绑在回环上,要对公网开放需服务端开启 GatewayPorts(谨慎评估暴露面)。
动态转发(-D):开一个 SOCKS5 代理,浏览器或 curl 的全部流量都经服务器出口:
ssh -D 1080 prod -Ncurl --socks5 127.0.0.1:1080 https://ifconfig.me # 显示的是 prod 的出口 IP断线不慌:tmux
耗时任务(编译、导入数据、训练)最怕 SSH 断线——进程收到 SIGHUP 直接终止。tmux 让会话运行在服务器端,断线后重连再贴回去:
tmux new -s import # 新建名为 import 的会话# 在会话里跑长任务;随时 Ctrl+b 然后按 d 脱离(detach)tmux ls # 查看会话列表tmux attach -t import # 重新接管几个高频快捷键(前缀键 Ctrl+b 之后按):c 新建窗口、数字 切换窗口、% 左右分屏、" 上下分屏、[ 进入滚屏模式(q 退出)。
团队协作时 tmux attach 到同一会话还能实现「双人同屏排障」。
保持连接与断线重试
网络不稳时,客户端定时发心跳防止 NAT/防火墙静默断连(写入本地 ~/.ssh/config):
Host * ServerAliveInterval 30 ServerAliveCountMax 3要求更高的场景可以用 mosh(基于 UDP,支持漫游和本地回显),在高铁、弱 Wi-Fi 下体验明显更好,但服务端需额外安装并放行 UDP 端口。
延伸阅读
man 1 ssh、man 5 ssh_config、man 5 sshd_config- OpenSSH 官方文档
- tmux 官方 Wiki
- Mosh 官网
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 26 天
部分内容可能已过时