设置 SSH 通过密钥登录 VPS NAS Router ,经常会用 SSH 客户端远程管理 VPS ,有时候也需要使用 SSH 客户端连接 NAS 以及 Router 路由器进行一些设置,登录的方式比较多,我最常接触的是用密码登陆和用密钥登录这两种,相比起来肯定是密钥登录的安全性高于密码登录,开始接触设置密钥登录的时候有点懵,经过一段时间的摸索发现不管是 VPS,还是 NAS,甚至路由器,用密钥登录的原理都是一样的:把公钥传输到需要登录用户的用户目录下的相应文件里面,然后再做一下简单的设置即可实现密钥登录各种服务器,设置成功以后就可以禁止 root 用户登录、禁止密码登录了,并且密钥没有密码保护的话还可以免密登录,以此文记录自己设置的习惯,同一对密钥的私钥也可以同时使用于本地的电脑、手机等 SSH 客户端,这样每次只需要把公钥传输至新设备,所有本地客户端就都可以使用这个密钥登录了,安全性和便利性提升很多
生成密钥对
首先需要一对密钥,通过 Apple Mac 的终端或者 Windows 的 Power Shell、PuTTY 以及手机上的 SSH 客户端都可以生成密钥对,当然也可以在服务器上生成密钥对,然后把私钥放在本地客户端用户的 .ssh/ 目录下,把公钥传输到服务端登录所用用户的 ~/.ssh/authorized_keys 文件里,就可以使用密钥登录了
PuTTY 以及手机上的 SSH 客户端生成密钥对都很简单直观,在此不表,Apple Mac 及 Windows Power Shell 生成密钥对的方法网上也有很多,比较简单,可以选择生成密钥的长度2048或者4096,也可以为密钥设置保护密码,每次使用私钥的时候都需要输入保护密码,可以有效防止私钥被盗用
我用 Apple Mac 生成密钥对后,在当前登录用户的家目录下的 .ssh 隐藏目录中会出现两个文件,id_rsa
为私钥,id_rsa.pub
为公钥
在服务器上安装公钥
把公钥文件 id_rsa.pub
拷贝到服务器(VPS、NAS、Router等等)登录用户xxx的家目录下的 ~/.ssh/ 目录中(登录用户的家目录自己查找,不一定是这个),键入以下命令在服务器上安装公钥
[xxx@host ~]$ cd .ssh
[xxx@host .ssh]$ cat id_rsa.pub >> authorized_keys
或者用:
[xxx@host .ssh]$ mv id_rsa.pub authorized_keys
接下来一定要为文件和目录设置权限,否则不一定能起作用
[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
配置 SSH ,开启密钥登录功能
编辑 /etc/ssh/sshd_config
文件,找到如下几行进行设置,去掉前面的#号:
$ vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
另外,root 登录以及密码登录在这一步可以暂时开启,以免出现问题登录不了
PermitRootLogin yes
PasswordAuthentication yes
设置好以后重启 sshd 服务:
[xxx@host .ssh]$ service sshd restart
或者用:
[xxx@host .ssh]$ systemctl restart sshd.service
然后退出之前的登录,重新登录进行验证,如果密钥设置了密码保护直接输入密钥的保护密码就可以登录,如果密钥没有设置密码就可以直接登录了,登录没有问题的话进去以后可以把上面的 root 登录和密码登录修改成 no,这样就可以禁止 root 用户登录、禁止用密码登录,再重启 sshd 服务,就设置完成了
PS:以上命令在非 root 用户登录的情况下需要在前面加 sudo 才能完成
Apple Mac 生成密钥对的命令如下:
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.