
你每登录一台服务器,就要输一次密码。你有5台服务器,每次登录都要输一遍。你开始觉得,花在输密码上的时间,加起来够写个小程序了。你想配置SSH密钥免密登录,但只会配一台。第二台又从头来一遍。今天教你怎么配一台,然后把密钥批量分发到所有服务器。
先看一个数据
在团队协作和生产环境中,免密登录带来的不仅是便利。配置了密钥登录后,你可以在脚本里安全地执行远程命令,不用在代码里写明文密码。手动操作效率提升一倍以上,因为省去了每次输入密码的时间。
第一步:生成密钥对
在你的本地电脑上操作。打开终端:
bash
ssh-keygen -t ed25519 -C "你的邮箱"
一路回车,会在~/.ssh/目录下生成两个文件:
id_ed25519:私钥,打死也不能给别人id_ed25519.pub:公钥,可以公开
如果你已经有密钥了,跳过这步,直接进入下一步。
第二步:把公钥传到服务器
单台服务器:用ssh-copy-id
bash
ssh-copy-id user@服务器IP
输入一次密码,公钥自动追加到服务器的~/.ssh/authorized_keys里。以后登录不需要密码。
手动操作(如果ssh-copy-id不能用)
bash
# 复制公钥内容 cat ~/.ssh/id_ed25519.pub # 登录服务器,把公钥加进去 mkdir -p ~/.ssh echo "公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
第三步:批量分发公钥
当你有10台服务器时,ssh-copy-id一台台输10遍很麻烦。可以写一个脚本来处理:
bash
#!/bin/bash
# 批量分发公钥到多台服务器
SERVERS=("192.168.1.10" "192.168.1.11" "192.168.1.12")
USER="root"
PASSWORD="你的密码"
for server in "${SERVERS[@]}"; do
echo "正在处理 $server ..."
sshpass -p "$PASSWORD" ssh-copy-id -o StrictHostKeyChecking=no $USER@$server
done
需要安装sshpass:apt install sshpass。或者用更安全的ssh-copy-id配合循环输入密码。
危险操作提醒:脚本里的密码是明文的,用完及时删除。
第四步:用~/.ssh/config管理多台服务器
配完密钥后,每次还要ssh user@192.168.1.10。有了~/.ssh/config文件,你可以给每台服务器起别名:
bash
Host web1
HostName 192.168.1.10
User root
IdentityFile ~/.ssh/id_ed25519
Host web2
HostName 192.168.1.11
User root
Host db
HostName 192.168.1.20
User admin
以后登录ssh web1就够了。如果同一个密钥用于多台服务器,把IdentityFile加在Host后面就行。如果不同服务器用不同的密钥,各自指定IdentityFile。
第五步:用ssh-agent管理私钥
你的私钥可能有密码(passphrase),每次用都要输一遍。
ssh-agent可以替你记住密码:
bash
eval $(ssh-agent) ssh-add ~/.ssh/id_ed25519
输入一次私钥密码,在当前终端会话里不用再输了。Mac用户还可以用ssh-add -K把密钥存到钥匙串里,重启不用重新加。
第六步:批量执行命令
密钥配好了,就可以在脚本里批量执行命令了。比如同时查看5台服务器的磁盘空间:
bash
for server in web1 web2 web3 db cache; do
echo "=== $server ==="
ssh $server "df -h"
done
或者用pssh工具(Parallel SSH)并行执行:
bash
pssh -h servers.txt -i "df -h"
servers.txt里每行一个服务器别名。
常见问题
Q:配完密钥还是提示输入密码
A:检查服务器上~/.ssh目录权限是不是700,authorized_keys是不是600。权限太松,SSH会忽略它。
Q:ssh-copy-id提示连接失败
A:检查服务器IP是否正确,防火墙是否放行22端口,密码是否输对了。如果服务器改了SSH端口,用-p 端口号参数。
Q:私钥文件权限太松
A:chmod 600 ~/.ssh/id_ed25519。私钥权限必须是600。
Q:换了电脑,之前的密钥还能用吗
A:把私钥文件(id_ed25519)复制到新电脑的~/.ssh/目录,权限设成600就可以继续用。或者重新生成一对密钥,把新公钥加到你所有服务器的authorized_keys里。
一个真实案例
某创业公司,运维管理着15台服务器。之前每次登录都要输密码,或者从密码管理器里复制粘贴。用了免密登录后,配合~/.ssh/config,登录一台服务器只需要敲3个字母。批量更新代码时,用一个脚本就能在所有服务器上执行命令。
他说:“以前最烦的就是输密码,现在终于不用了。省下的时间够我学新东西。”
最后一句
免密登录不是“懒”,是“聪明”。你把这10分钟花在配置上,未来每天省下5分钟。这笔账怎么算都划算。去把你的公钥传到所有服务器上。用ssh-copy-id配一遍,用~/.ssh/config起好别名。然后忘掉密码,用密钥说话。你的服务器会更欢迎你。




