Linux上使用ssh免密登录阿里云服务器

更新:2019/03/25

ssh原理:https://baijiahao.baidu.com/s?id=1612411213158569988&wfr=spider&for=pc

SSH会话建立过程:
1.客户端发起一个TCP连接端口为22。
2.服务端收到连接请求后将自己的一些关键信息发给客户端,信息内容包括:
服务端的公钥:客户收到这个公钥后会在自己的"known_hosts"文件中进行搜索,如果找到了相同的公钥,则说明此前连接过该服务器,如果没有则会显示一段警告信息,由用户来决定是否连接。
服务端所支持的加密算法列表:客户端根据此列表决定采用哪种加密算法。
3.生成会话密钥:此时客户端已经拥有了服务端的公钥,接着客户端和服务器端就需要协商出一个双方都认可的密钥,并以此来对后续的通信内容进行加密。密钥协商是通过Diffie-Hellman算法来实现的具体过程是:
(1)服务器端和客户端共同选定一个大素数,叫做种子值
(2)服务端和客户端各自独立的选择另外一个只有自己才知道的素数
(3)双方使用相同的加密算法(如AES),由种子值和各自的私有素数生成一个密钥值,并将这个值发送给对方。
(4)在收到密钥值之后,服务端和客户端根据种子值和自己的私有素数计算得出一个最终的密钥,这个结果双方独立进行但结果应该是相同的。
(5)双方使用上一步的得到的结果作为密钥来加密和解密通信内容。
4.接下来客户端将自己的公钥id发送给服务器端,服务器端需要对客户端的合法性进行验证://这里的公钥id也就是说客户端会告诉服务器端自己的公钥的id号,可能会有很多不同的人放不同的公钥去到服务器上。
(1)服务端在自己的"authorized_keys"文件中搜索与客户端匹配的公钥。
(2)如果找到了服务端用这个公钥加密一个随机数,并把加密的结果发送给客户端。
(3)如果客户端持有正确的私钥,那么它就可以对消息进行解密从而获得这个随机数。
(4)客户端由这个随机数和当前的会话密钥共同生成一个MD5值。
(5)客户端把MD5值发给服务器端。
(6)服务器端同样用会话密钥和原始的随机数值计算MD5值,与客户端发来的比对,如果相等,则验证通过,接着就能通信了。

大概意思就是说,server产生了一把公钥和一把私钥,公钥会给到客户端。PS:这个公私钥产生可以是双向的,我不想输入你的密码我就放个公钥(有点像寄放门卡)去到你那里,以后你家的房管见到我就会自动来给我来开门了。客户端也可以产生一把公钥和私钥,公钥给到服务器端。
client给server发消息的话会用服务器端放在客户端的那把公钥加密,server收到后会用自己的那把私钥解密。
而server给client回复消息会用服务器端的那把私钥加密,client收到后使用服务器端放在客户端的那把公钥解密。

(针对于服务器端产生公钥和私钥并且把公钥放到客户端的情况)

也就是客户端发消息公钥加密,私钥解密。
服务器端回消息是用私钥加密,公钥解密。

PKI公钥基础建设,可以存放证书信息,CA的内容也可以存在上面。
PMI授权管理基础建设。CA可以防止中间人攻击。

版本是Ubuntu 16.04LTS,不过所用的命令不同版本没有什么差别。

1.在Linux终端输入:

//注意需要在本地机器上生成密钥

ssh-keygen -t rsa

之后会有三处让你Enter的地方,直接使用换行符忽略就好。

接着就会生成一串以ssh-rsa开头的迷之字符,将这一串字符全选复制。

2.接着进入目录:

cd ~/.ssh/id_rsa.pub  //再去到服务端的.ssh目录下,将之前从本地机器上弄过来的字符移动到authorized_keys文件中。

或者也可以不拷贝直接cat id_dsa.pub >> ~/.ssh/authorized_keys  //直接将复制来的内容粘贴到到本机的authorized_keys中。

若该目录下没有authorized_keys文件,则用touch命令新建该文件。

touch authorized_keys

接着以vi方式打开该文件,将之前复制的字符串粘贴进去并保存退出。

3.再重启一下ssh

service ssh restart

4.接着我们再尝试登陆服务器:

ssh root@阿里云服务器公网地址

发现不用再输入密码啦大功告成。

5.这里有一个操作是说设置文件和目录权限,为了安全,挺好的:
chmod 600 authorized_key
chmod 700 -R .ssh

如果我们想添加别人的公钥让别人也可以免密登陆,就将他的公钥也拷贝进上述文件即可。

你可能感兴趣的:(Linux上使用ssh免密登录阿里云服务器)