SSH 进行免密登录过程
- 客户端创建密钥对
ssh-keygen -t rsa
- 客户端分发公钥到服务端
cd ~/.ssh
ssh-copy-id -i id_dsa.pub root@172.16.1.31
和下面shell命令相同
cat ~/.ssh/id_rsa.pub| ssh root@172.16.1.31 "mkdir -p ~/.ssh chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys"
客户端分发公钥到服务端时, 会接受来自服务端的rsa的公钥,并将公钥保存到文件/root/.ssh/known_hosts
中,通过查看服务端/etc/ssh/ssh_host_rsa_key.pub
文件内容,确定内容一致
在接收到服务端公钥之后,输入服务端密码,将客户端公钥信息发送到/root/.ssh/authorized_keys
文件。
登录过程解析
服务端发现这个客户端想要使用authorized_keys里面已经存在的公钥直接免密登录,那么就要证明这个客户端是这个公钥的主人。所以它使用这个公钥去加密发给客户端,客户端使用私钥进行解密。从而证明自己有私钥。
- 客户端发送自己的密钥ID给服务端
- 服务器在自己的
authorized_keys
文件中检查是否有此ID的公钥 - 如果有的这个公钥,服务器生成一个随机数,使用此公钥进行加密
- 服务器将加密后的随机数发给客户端
- 客户端用私钥解密该随机数,然后再本地为随机数做MD5哈希
- 客户端将该MD5哈希发给服务器端
- 服务器端为一开始自己生成的随机数也做一个MD5哈希,然后用通讯通道“公共的密钥”将该哈希加密,再跟客户端发来的内容进行对比。如果双方内容一致,则通过验证,开放访问权限给客户端
实践
使用阿里云ECS密钥对不生效

需要重启ECS服务器,才能生效。
开启使用密码登录
echo "abc12345" | passwd root --stdin && echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config && sed -i "/PasswordAuthentication no/d" /etc/ssh/sshd_config && service sshd restart
网友评论