例如:主机名为node1无密码登录主机名为node2

一、在node1上执行:

  1. cd ~/.ssh (若没有该目录,先执行ssh localhost)
  2. rm ./id_rsa* (删除之前生成的公钥)
  3. ssh-keygen -t rsa (生成公钥,此时一直按回车就行)
  4. cat ./id_rsa.pub >> ./authorized_keys
  5. scp ~/.ssh/id_rsa.pub ubuntu@node2:/home/node2/(将公钥传输到node2)

二、在node2上执行:

  1. mkdir ~/.ssh (若不存在先创建,若存在则可忽略此步)
  2. cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
  3. rm ~/id_rsa.pub (用完即可删除)

三、结果:ssh ubuntu@node2的IP可以直接登录不需要输入密码了

补充: 如果登录报错sign_and_send_pubkey: signing failed: agent refused operation

  • 在node1主机上执行eval "$(ssh-agent -s)"ssh-add即可解决。

四、认证流程:以下将登陆端称为"客户端",被登录端称为"服务端"。

  1. 客户端生成一个密钥对,私钥自己保留,将公钥拷贝给服务端。
  2. 客户端发送免密登录请求。
  3. 服务器查找~/.ssh/authorized_keys文件下是否有对应客户端IP的公钥。
  4. 如果有,则随机生成一段字符串,并用客户端的公钥将字符串进行加密,然后发送给客户端。
  5. 客户端收到加密的字符串后,用私钥进行解密。
  6. 客户端将解密之后的字符串发送给服务端。
  7. 服务端检查客户端发来的字符串与之前发给客户端的字符串是否一致,若一致则验证通过。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐