返回笔记列表

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 前先开一个新终端确认能登录再改,不然改错了可能把自己锁在外面。