一台机器连接到其他机器不需要密码

流程就不画图了:一般是管理机使用密钥认证,管理机创建公钥和私钥,将公钥发送给被管理机。
然后要连接的时候发出请求,被管理机发一串数据传给管理机,管理机使用私钥加密再发送给被管理机,管理机器用公钥解密。
校验通过,向管理机建立连接。

使用

  1. 1.创建密钥对
  2. ssh-keygen
  3. 2.分发公钥
  4. ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.31
  5. 3.测试
  6. ssh root@10.0.0.31 hostname

一键化密钥认证

  1. #!/bin/bash
  2. #author: Rdymy
  3. #desc 一键自动化创建和分发公钥
  4. ip_list="10.0.0.7 10.0.0.31 10.0.0.41"
  5. ssh_root_pass="1"
  6. echo '--------------------------------------------'
  7. echo '1. 创建 key'
  8. echo '--------------------------------------------'
  9. # 创建密钥对并指定私钥路径和使用私钥时的密码短语
  10. ssh-keygen -f ~/.ssh/id_rsa -P ''
  11. echo '--------------------------------------------'
  12. echo '2. 分发 pub key'
  13. echo '--------------------------------------------'
  14. for ip in $ip_list
  15. do
  16. # ssh填密码的工具sshpass,需yum下载 指定公钥地址 暂时停止主机验证 连接的ip
  17. sshpass -p$ssh_root_pass ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@$ip
  18. done

检查脚本(了解)

#!/bin/bash
#author: oldboy lidao996 
#desc 批量检查脚本

ip_list="10.0.0.7 10.0.0.31 10.0.0.41"
echo '--------------------------------------------'
echo '批量执行命令'
echo '--------------------------------------------'

for ip in $ip_list
do
    ssh root@$ip $@
done

直接用ansible就行

排错

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:zFS1I2ks6YHkKywUNBRiGSVUtfadGim6YBRbY0/xBrw.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:2
ECDSA host key for web01 has changed and you have requested strict checking.
Host key verification failed.


## 删除对应ip的在known_hosts相关信息
## vim /root/.ssh/known_hosts