SSH 免密登录:一次配置,告别每次输密码
SSH 免密登录:一次配置,告别每次输密码
每次连服务器都要输一遍密码,输错还得重来;写脚本批量操作时更是处处卡壳。SSH 密钥登录就是为了解决这个问题:配置一次,之后连接不再输密码,既方便,安全性也比弱口令高得多。
密钥登录是怎么回事
简单说,就是在本机生成一对密钥:私钥自己留着,公钥放到服务器上。连接时服务器用公钥出一道“只有持有私钥的人才能解开”的题目,本机用私钥答对即可登录,全程不需要把密码发到网上。私钥相当于一把不能离身的钥匙,公钥相当于可以公开张贴的锁。
第一步:在本机生成密钥对
打开终端,执行:
ssh-keygen -t ed25519 -C "你的邮箱"
一路回车使用默认路径即可。命令会在 ~/.ssh/ 下生成两个文件:id_ed25519 是私钥,id_ed25519.pub 是公钥。生成时会被问要不要给私钥再设一个口令(passphrase):设了更安全,但每次使用仍需输入这句口令;如果目标就是彻底免密,直接回车留空。
注意:私钥文件绝不能发给别人,也不要上传到代码仓库或网盘。泄露后要立即在服务器上删除对应的公钥并重新生成。
第二步:把公钥装到服务器上
最省事的办法是用 ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@服务器IP
它会把公钥追加到服务器的 ~/.ssh/authorized_keys 里,并自动处理好文件权限。执行时需要输一次服务器密码——这是最后一次为这件事输密码。
如果 ssh-copy-id 不可用,也可以手动操作:把 id_ed25519.pub 的内容复制出来,在服务器上执行 mkdir -p ~/.ssh && echo "公钥内容" >> ~/.ssh/authorized_keys,再用 chmod 700 ~/.ssh 和 chmod 600 ~/.ssh/authorized_keys 把权限收紧。权限太松时 SSH 会直接拒绝密钥登录,这是常见坑。
第三步:验证免密登录
ssh root@服务器IP
如果直接进了命令行,没有任何密码提示,配置就成功了。建议先别急着关掉当前已登录的窗口:新开一个窗口验证,确认新方式可用,再动原来的配置。万一配错了,还有退路。
进阶:关掉密码登录更安全
确认密钥登录稳定后,可以在服务器上把密码登录关掉,让暴力猜密码的扫描彻底失效。编辑 /etc/ssh/sshd_config,把 PasswordAuthentication 改成 no,然后重启 SSH 服务:
systemctl reload sshd
改之前务必确认:第一,密钥登录已验证通过;第二,服务器还有别的进服务器的办法(比如云厂商的控制台终端)。两者缺一不可,否则可能把自己锁在门外。
一个容易踩的坑:旧算法密钥被拒
较新的 OpenSSH 默认不再接受基于 SHA-1 签名的旧 RSA 密钥。如果手头是很久以前生成的 RSA 密钥,登录时可能莫名失败。解决办法有两个:重新生成一对 ed25519 密钥(推荐),或者在服务器的 sshd 配置里显式允许 PubkeyAcceptedAlgorithms +ssh-rsa。前者一劳永逸,后者只是过渡。
日常使用小技巧
给常用服务器起个别名,写进本机 ~/.ssh/config:
Host myserver
HostName 139.159.226.72
User root
IdentityFile ~/.ssh/id_ed25519
之后 ssh myserver 就能直连,连 IP 都不用记。多台服务器、多把密钥时,逐个写 Host 段落管理,比每次翻笔记找 IP 可靠得多。
密钥登录看着步骤多,实际十分钟就能配完。配好之后,日常连服务器、传文件、跑自动化脚本都不再被密码打断,而服务器反而更安全——这是一笔很划算的投入。
- 点赞
- 收藏
- 关注作者
评论(0)