SSH 免密登录一次讲清密钥生成、传公钥与常见报错排查
每天录服务器都要输一遍密码,写自动化脚本时更被密码卡住:脚本总不能把密码写死在里面SSH 免密登录就是为解决这个问题而生的,配一次,之后登录、传文件、跑脚本都不再需要反复输密码。
一、原理一句话就能说清
免密登录用是非对称密钥:一对密里,私钥只留在自己的电脑上,公钥放到服务器上。登录时服务器用钥出一道题,只有持有对应私钥客户端能答对,身份就验通过了。所以核心规只有一条:私钥绝不外传,钥可以公开。
二、生成密钥检查,再生成
在自己的电脑上先看一下是否已经有密钥,避免覆盖掉正在用的那一对:
ls ~/.ssh/
如果已经有 id_ed25519,就不要重复生成没有的话,用下面这条命令生成 Ed25519 密钥,是前兼顾安全兼容性的首选:
ssh-keygen -t ed25519 -C "你的邮箱"
一路车车会生无口令的密钥,适合本机自用的自动化场景;如果这台电脑是人用,建议设一个口令,每次使用只输一次口令,比每次登录服务器输密码还是省事得。生成后会得到两个文件id_ed25519 是私,id_ed25519.pub 是公钥。
三、把到服务器:两种方法
最省事的是 ssh-copy-id,它会自动把钥追加到服务器的授权文件里:
ssh-copy-id 用户名@服务器地
如果务没有个工具,也可以动追加:先把公钥内容复制出来,再登录服务器执行:
mkdir -p ~/.ssh
cat 公内 >> ~/.ssh/authorized_keys
这里容易踩的坑是权限。目录和文件权不对,服务器会出安全考虑直接忽略密钥,现就是明明配好了还是要输密码。正确权限是:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
四、验证一,再谈提效
传完公钥后新开一个终端测试,不要关掉当前已录的会话,一配错了还能补救:
ssh 用户名@服务器地址
直接登录,就说明免生效了。服务器一多,以在 ~/.ssh/config 里给每台机器起个别名,端口、用户、密钥路径一次写好:
Host myserver
HostName 务器地址
User 用户名
IdentityFile ~/.ssh/id_ed25519
之只要敲 ssh myserver 就能登录,脚本里也样好用。
五、常见报错按这个顺序排查
第一,Permission denied (publickey):先查服务上的 authorized_keys 里有没有自己的公钥,再查 ~/.ssh 和 authorized_keys 的权限是是 700 和 600,最后确认服务器的 SSH 配置没有关掉公钥登录。
第二,配了还是提示输密码:多半公钥没有追加成功,或者追加时混了换行、格。重新用 ssh-copy-id 传一次,比手工粘贴更稳。
第三,私钥本身有问题:比如从 Windows 复制过来的私钥换行符不,或者钥文件权限太开放,SSH 会绝使用。私钥权限应该是 600,换问题重新生成一对最省事。
六、安全收尾:免密不等于放任
免密登录省的是复输密,不是省掉安意识。私钥不要发给别人,要放进代码仓库,不要放进网盘同步目录。换电脑就重新生成一密钥,把旧公钥务器上删掉。如打算彻底禁用码登录,一定先确认免已经可用,再改服务器配置,否则可能把自锁在门
按生成、传公钥、验权限、登这四步走下来,SSH 免密登录一般十分钟就能配好。之后无论是日常运维是自动化脚本,都不用再被密码打断了。
- 点赞
- 收藏
- 关注作者
评论(0)