每次登服务器都要翻 IP 和密码?SSH 密钥登录一次配好
自从开始用云服务器,我发现每次登录都要经历一遍同样的折磨:先翻聊天记录找 IP,再翻备忘录找密码,输错两次还会被暂时锁定。其实 SSH 本来就提供了更顺手的办法:密钥登录加一份本地 config 配置,配好一次之后,登录就只剩一条短命令。
第一:先弄清密钥登录到底在比对什么
密码登录是「服务器问你知不知道密码」,密钥登录则是「你拿私钥证明你就是你」。本地生成一对密钥:公钥可以公开,相当于一把锁,放到服务器上;私钥只留在自己电脑里,相当于唯一的钥匙,登录时服务器用锁来验证钥匙对不对得上。生成只需要一条命令:
ssh-keygen -t ed25519
一路回车即可(也可以给私钥再设一个口令短语,多一层保护)。执行完,~/.ssh 目录里会多出 id_ed25519(私钥,绝不能外传,也不要发到任何网盘)和 id_ed25519.pub(公钥,可以随便发)。
第二:把公钥送上服务器
最省事的办法是 ssh-copy-id,它会自动把公钥追加到服务器的 ~/.ssh/authorized_keys 里:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@服务器IP
这一步还需要用密码登录最后一次。完成后退出,再重新 ssh user@服务器IP,如果直接进去了、全程没问密码,说明配好了。万一没有 ssh-copy-id(比如在 Windows 上),手动把 .pub 文件里的那一行内容追加到服务器的 authorized_keys 末尾,效果完全一样,注意不要把原有内容覆盖掉。
第三:用 config 把「长串参数」缩成一个词
密钥搞定之后还有一个小毛病:服务器 IP 又长又难记,每次还要带 -p 指定端口、带用户名。~/.ssh/config 就是为这个准备的:
Host myserver
HostName 203.0.113.10
User ubuntu
Port 22
IdentityFile ~/.ssh/id_ed25519
保存之后,登录只需要:
ssh myserver
scp、sftp 同样认这个别名,传文件时写 scp 文件 myserver:~/ 就行。有两台、三台服务器就在 config 里多写几段,互不影响。两个提醒:一是 config 文件和私钥的权限别太松,chmod 600 ~/.ssh/id_ed25519 是好习惯,有些 SSH 版本遇到私钥权限过宽会直接拒绝使用;二是换电脑时要记得把私钥和 config 一起迁移过去,并妥善保管,私钥丢了就只能重新生成一对再把新公钥送上服务器。
小结
- ssh-keygen -t ed25519 生成密钥对,私钥只留本地。
- ssh-copy-id 把公钥送上服务器,之后免密登录。
- ~/.ssh/config 给每台服务器起别名,IP、端口、用户名都不用再背。
服务器登录是每天都要重复很多次的小动作,把它从「翻记录加输密码」变成一条 ssh 别名,省下的不只是时间,还有被繁琐步骤打断思路的次数。
- 点赞
- 收藏
- 关注作者
评论(0)