一、SSH公钥登录原理

在平时工作中我们经常要远程登录服务器,这就要用到SSH协议:

主要有两种登录方式:第一种为密码口令登录,第二种为公钥登录

密码口令登录


  通过密码进行登录,主要流程为:


    1、客户端连接上服务器之后,服务器把自己的公钥传给客户端


    2、客户端输入服务器密码通过公钥加密之后传给服务器


    3、服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录

公钥登录


  公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:


    1、客户端生成RSA公钥和私钥


    2、客户端将自己的公钥存放到服务器


    3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端


    4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器


    5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

二、服务器端生产密钥(一直默认回车就好,当然你也可以重新命名):

[root@localhost ~]# ssh-keygen -t rsa

然后会在 root目录下自动生产.ssh目录和公钥(id_rsa.pub)私钥(id_rsa)

[root@localhost ~]# cd /root/.ssh

新建一个公钥文件,设置权限为600

[root@localhost .ssh]# touch authorized_keys

[root@localhost .ssh]# chmod 600 authorized_keys

将公钥拷贝到authorized_keys

[root@localhost .ssh]# cat id_rsa.pub >> authorized_keys

修改配置

[root@localhost /]# vi /etc/ssh/sshd_config

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

重启服务(只有root有权限)

[root@localhost /]# service sshd restart

将私钥id_rsa拷贝到我们的本地使用密钥连接(可以使用xshell ,WinSCP)


到现在,可以用密钥登录,但是密码还是能登录,所以要去掉密码登录。

[root@localhost /]# vi /etc/ssh/sshd_config

PasswordAuthentication no

重启服务(只有root有权限)

[root@localhost /]# service sshd restart