$ ssh-keygen -t rsa -C "xxx"
参数说明: 算法
固然,若是不想要这些能够直接输入(通常也是这么作的)下面命令:vim
ssh-keygen
以后会在用户的根目录下的.ssh的文件夹生成私钥id_rsa和公钥id_rsa.pub。本地的.ssh的文件夹存在如下几个文件:服务器
注意:执行上面命令后,它要求你输入加密的一些附加参数,不用管,通常默认就好,一直回车便可生成秘钥。 ssh
$ 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中(存放远程免密登陆的公钥,主要经过这个文件记录多台机器的公钥),而后退出便可。 加密
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