SSH实现远程免密登陆

1.客户端生成一对秘钥(公钥私钥)

$ ssh-keygen -t rsa  -C "xxx"

参数说明: 算法

  • -t 加密算法类型,这里是使用rsa算法 若是没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。
  • -C来指定所指定的注释,能够方便用户标识这个密钥,指出密钥的用途或其余有用的信息,如本身的邮箱或者其余信息都行。

固然,若是不想要这些能够直接输入(通常也是这么作的)下面命令:vim

ssh-keygen

以后会在用户的根目录下的.ssh的文件夹生成私钥id_rsa和公钥id_rsa.pub。本地的.ssh的文件夹存在如下几个文件:服务器

  • id_rsa : 执行命令后生成的私钥文件
  • id_rsa.pub : 执行命令后生成的公钥文件
  • know_hosts : 已知的主机公钥清单//ssh命令远程链接不一样服务器时能够选择接受到不一样的公钥,会将这些主机的公钥都保存在这里。

注意:执行上面命令后,它要求你输入加密的一些附加参数,不用管,通常默认就好,一直回车便可生成秘钥。 ssh

2.拷贝公钥到服务器

$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@xxx.xxx.xxx.xxx

user表明Linux用户,xxx.xxx.xxx.xxx表明远程主机地址,下面为例子:ide

$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.2.128

注意:此时须要登陆到user@xxx.xxx.xxx.xxx服务器的密码(没错,这里又用到了前面ssh密码登陆里讲过的步骤),输入正确后便可在服务器生成公钥,该公钥保存在服务器家目录的.ssh的authorized_keys中(存放远程免密登陆的公钥,主要经过这个文件记录多台机器的公钥),而后退出便可。 加密

3.客户端再发送链接请求(包括用户名、IP)

ssh root@xxx.xxx.xxx.xxx

服务器获得客户端的请求后,就会到authorized_keys中查找,若是有响应的用户名和IP,就会随机生成一个字符串;
服务器将使用客户端拷贝过来的公钥将随机生成的字符串进行加密,而后发送给客户端;
客户端会使用私钥解密服务器发送来的消息,而后将解密后的字符串发送给服务器;
服务器接收到客户端发送来的字符串后,跟以前的字符串进行对比,若是一致,就容许免密码登陆。rest

禁用密码登录

既然开启了SSH免密登录,就能够把密码登录关闭了。这样既能够快速链接远程服务器,也能够防止***。
修改/etc/ssh/sshd_config文件:code

# vim /etc/ssh/sshd_config

将其中3行命令更改,前面若带#,就删掉,做用是能够用密钥登录服务器:字符串

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

而后在修改其中PasswordAuthentication属性为no,即禁用密码登录:get

PasswordAuthentication no

重启sshd服务使操做生效:

systemctl restart sshd.service

注:本地密钥请保存好,远程服务器authorized_keys中公钥也别乱修改。
参考资料
https://zhuanlan.zhihu.com/p/73944703

相关文章
相关标签/搜索