用 SSH Config 告别一长串登录命令:多台服务器的高效管理实践
管理三五台服务器之后,最先崩溃的往往不是服务器,而是自己的命令行历史。每次登录都要敲一遍 ssh -i ~/.ssh/id_ed25519 -p 2222 deploy@123.45.67.89,端口记混一次就得多试几次,密钥文件一多更是分不清谁是谁。SSH Config 就是为了解决这个问题而生的:把连接信息写进 ~/.ssh/config,以后登录只需要一个别名。
一、从一条命令开始
最基本的写法只需要四行:
Host web
HostName 123.45.67.89
User deploy
Port 2222
保存之后,ssh web 就等价于前面那一长串命令。Host 是自己起的别名,建议用用途命名,比如 web、db、jump,而不是 server1、server2 这种过两个月就看不懂的名字。HostName 填真实地址或域名,User 和 Port 各自独立,换一台机器只改这几行即可。
二、密钥多了一样管得住
一台机器一个密钥是常见做法。给每个 Host 单独指定密钥文件,就不会出现拿 A 机器的密钥去敲 B 机器的门:
Host db
HostName 10.0.1.20
User admin
IdentityFile ~/.ssh/id_db
IdentitiesOnly yes
IdentitiesOnly yes 很关键,它让 SSH 只尝试这个 Host 指定的密钥,而不是把 agent 里的密钥挨个试一遍。密钥太多时,服务端可能因为认证尝试次数超限直接拒绝,这个选项能避免不少莫名其妙的登录失败。
三、内网机器走跳板机
云上常见的拓扑是只有一台跳板机有公网地址,业务机都在内网。以前要先登录跳板机再二次跳转,现在一行配置就能直达:
Host db-inner
HostName 10.0.1.20
User admin
ProxyJump jump
其中 jump 是另一个 Host 别名,同样在 config 里定义好。ssh db-inner 时 SSH 会自动先连跳板机再转发到内网,scp 和 rsync 也能直接用这个别名,复制文件不用再中转。
四、几个容易踩的坑
第一,权限。~/.ssh/config 建议设为 600,~/.ssh 目录设为 700,权限太开放时 SSH 会直接拒绝读取配置,报错信息还不直观,先查权限能省很多时间。
第二,通用配置放最后。可以用 Host * 写默认项,比如 ServerAliveInterval 60 防止空闲断开,AddKeysToAgent yes 自动把密钥加入 agent。但要注意匹配顺序:SSH 对每个参数取第一个匹配到的值,所以 Host * 一定要放在文件末尾,否则会盖住具体 Host 的配置。
第三,别名和密钥要分环境。生产、测试用不同的密钥和不同的别名前缀,比如 prod-web 和 test-web,避免在测试机上顺手敲了生产命令。密钥文件不要放进代码仓库,也不要通过聊天工具明文传给别人。
五、小结
SSH Config 没有新技术,它只是把每次都要重复输入的东西固化下来:别名对应一台机器,配置对应一套连接参数。花十分钟整理一次,之后每台服务器的登录、传文件、做部署都变成一句话。多台服务器的管理成本,很多时候不是被机器数量压垮的,而是被零散的连接细节拖垮的,先把连接这件事收拾整齐,后面的运维才谈得上高效。
- 点赞
- 收藏
- 关注作者
评论(0)