使用 sshkey 实现免密码 ssh

在使用公有云的时候,可能会受到大量的扫描,其中大部分都是对常用用户(例如 root)的口令暴力猜测。虽说使用由各种字母、数字、符号混杂的口令能够大大提高安全性,但登录后看到那几万个 failed logins 总是有点碍眼。把 ssh 的端口从 22 改成其它不常见的端口也算是一个方法,但始终是治标不治本,毕竟这只能防一防那些随意乱扫的人,对于指定要 hack 某一台主机的,总能找到开放的 ssh 端口。

从另一个角度来说,在自己反复连接远程主机的时候,每次都需要重新输入口令,也是一键比较烦的事情。

使用 sshkey 来免口令 ssh 就可以避免以上两个问题。即使把 ssh 端口保持在 22,只要 sshkey 不符合,直接就拒绝连接了。同时,在ssh key 符合的情况下,能够不需要输入口令秒连接。

首先在本地 ssh-keygen -t rsa 生成密钥,就会在 ~/.ssh 目录下生成 id_rsaid_rsa.pub 两个文件,分别是私钥和公钥。私钥是自己本地保存的,而公钥是可以公开分发的,因此将公钥文件 id_rsa.pub 通过能想到的各种方法放置到远程主机的 ~/.ssh 下,并执行 cat id_rsa.pub >> authorized_keys 追加写入,这样就相当于让远程主机认识到本地主机,可以免口令登录了。

然后修改 ssh 服务的配置文件 /etc/ssh/sshd_config ,把 PasswordAuthentication 字段的值改为 no,并重启 ssh 服务,就把 ssh 口令登录禁用了。