学习中心/工程实践/Linux/Linux 9:钥匙、跳板、拷文件
· Linux · 9 · SSH
Linux 9:钥匙、跳板、拷文件
authorized_keys、ProxyJump、rsync、隧道。关密码之前留一条后路。

钥匙比密码稳
SSH 是远程干活的门。这一块走完,你该能用钥匙登录、跳板、拷文件、开隧道,并且在关密码登录之前确认自己不会被锁在外面。私钥不进聊天、不进 Git、不进备份包的明文。
- 造钥匙ssh-keygen
- 放公钥authorized_keys
- 跳 / 拷ProxyJump / rsync
- 关密码先确认能进
1. 本机造钥匙
- 造要口令就设。空着也能用,笔记本丢了更危险
ssh-keygen -t ed25519 -C "you@example.com" -f ~/.ssh/id_ed25519 - 看目录应是 700,私钥 600,公钥 644
ls -l ~/.ssh
私钥 ~/.ssh/id_ed25519,公钥是同名 .pub。只把 .pub 给服务器。一台电脑一把常用钥匙够了,服务器不要共用你的私钥。
2. 公钥放到服务器
- 放还需要密码的那一次
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@203.0.113.10 - 登通了再往下
ssh -i ~/.ssh/id_ed25519 user@203.0.113.10
没有 ssh-copy-id,就手工把公钥追加进服务器 ~/.ssh/authorized_keys。那一侧:.ssh 目录 700,authorized_keys 600。权限太松,sshd 会直接忽略钥匙。
3. 给机器起短名字
本机 ~/.ssh/config:
- 写下面几行是示例,按行写进 ~/.ssh/config
Host vps - 写地址或 DNS
HostName 203.0.113.10 - 写远程用户名
User user - 写用哪把私钥
IdentityFile ~/.ssh/id_ed25519
之后 ssh vps 即可。IdentitiesOnly yes 避免 ssh-agent 里太多钥匙试到被服务器踢。
4. 钥匙进 agent
- 加这一次登录会话里不用反复输私钥口令
ssh-add ~/.ssh/id_ed25519 - 看agent 里有哪些
ssh-add -l
5. 拷文件
- 拷单个文件够用
scp ./notes.tar.gz vps:/tmp/ - 同步目录用 rsync。先空跑
rsync -a --dry-run ./site/ vps:/var/www/site/
从服务器拉回来,把方向反过来。大文件、排除 node_modules,rsync 比 scp 合适。
6. 跳板
内网机器不能从笔记本直连时,先到堡垒机,再进内网。config 里:
- 写内网那一台
Host inner - 写内网地址
HostName 10.0.0.12 - 写经 vps 跳。老写法是 ProxyCommand
ProxyJump vps
7. 隧道
- 转本机 18080 转到服务器上的 8080。-N 不打开 shell
ssh -N -L 18080:127.0.0.1:8080 vps
数据库、管理后台只听 127.0.0.1 时用这个。用完关掉。不要把生产库端口暴露到 0.0.0.0。
8. 关密码之前
钥匙多次登录都稳了,再改服务器。sshd 的配置在 /etc/ssh/sshd_config 或 sshd_config.d。改完:
- 查配置语法。错了先别重启
sudo sshd -t - 重载有的发行版服务名是 ssh
sudo systemctl reload sshd
- PasswordAuthentication no:关密码。先留一个已登录的窗口。
- PermitRootLogin no:root 不直接 SSH。用普通用户再 sudo。
- 主机密钥变了,ssh 会拒绝连。确认是你重装过,再 ssh-keygen -R 那台地址。
- fail2ban 或云厂商的安全组,防的是扫密码。钥匙开了,仍要把 22 的来源收窄。
这块过关:能跳、能拷、能开隧道,关密码之前还有第二条路。下一篇让服务开机自己起来。