SSH 配置:免密登录 + 端口转发 + 代理
SSH 是远程管理服务器的基本工具。这篇把最常用的几个场景讲清楚:生成密钥、免密登录、端口转发、通过跳板机连内网。
一、生成 SSH 密钥
# 生成 ed25519 密钥(推荐,比 RSA 短且更安全)
ssh-keygen -t ed25519 -C "your-email@example.com"
# 一路回车用默认路径 ~/.ssh/id_ed25519
# 可以设 passphrase(推荐设,安全)
查看公钥
cat ~/.ssh/id_ed25519.pub
二、免密登录
把公钥放到服务器
# 方式一:ssh-copy-id(最简单)
ssh-copy-id user@server-ip
# 方式二:手动
cat ~/.ssh/id_ed25519.pub | ssh user@server-ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
验证
ssh user@server-ip
# 不再要求密码 = 成功
三、~/.ssh/config 配置
配好之后,ssh myserver 就能直连,不用每次打长串参数。
# ~/.ssh/config
chmod 600 ~/.ssh/config
Host myserver
HostName 1.2.3.4
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60 # 每60秒发心跳,防断连
ServerAliveCountMax 3
Host prod
HostName 5.6.7.8
User admin
ProxyJump myserver # 通过 myserver 跳板连 prod
IdentityFile ~/.ssh/id_ed25519
用法:
ssh myserver # 直连 1.2.3.4
ssh prod # 自动通过 myserver 跳板连 5.6.7.8
四、端口转发
本地端口转发(最常见)
服务器上有服务跑在 8000 端口,但只监听 127.0.0.1(外网访问不了)。本地转发:
# 本地 8000 → 服务器 127.0.0.1:8000
ssh -L 8000:127.0.0.1:8000 myserver
# 然后本地浏览器打开 http://localhost:8000
远程端口转发
反过来,让服务器访问你本地的服务:
# 服务器 127.0.0.1:9000 → 本地 9000
ssh -R 9000:127.0.0.1:9000 myserver
动态转发(SOCKS 代理)
# 本地 1080 端口变成 SOCKS5 代理,流量走服务器
ssh -D 1080 myserver
# 浏览器设置 SOCKS5 代理 127.0.0.1:1080
# 或命令行: curl --socks5 127.0.0.1:1080 http://example.com
五、scp / rsync 传文件
# scp 单文件
scp local-file.txt myserver:/tmp/
# scp 目录
scp -r ./local-dir/ myserver:/tmp/
# rsync 增量同步(大目录推荐)
rsync -avz --progress ./local-dir/ myserver:/opt/project/
六、安全建议
- 禁用密码登录(
/etc/ssh/sshd_config里PasswordAuthentication no) - 禁用 root 直接登录(
PermitRootLogin no) - 改默认端口(可选,增加一点安全性)
- 用 fail2ban 防暴力破解
- 密钥设 passphrase
⚠️ 注意:改 sshd_config 前先开一个新终端确认能登录再改,不然改错了可能把自己锁在外面。