client 192.168.1.10(ansible@client无密码登录到ansible@server)
server 192.168.1.20
首先在客户端上创建一对公私钥(公钥文件:~/.ssh/id_rsa.pub;私钥文件:~/.ssh/id_rsa),然后把公钥放到服务器上(~/.ssh/authorized_keys),自己保留好私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了.
第一次登陆后,ssh就会把登陆的ssh指纹存放在用户home目录的.ssh目录的know_hosts文件中,如果ssh指纹已经改变,你需要把 .ssh 目录下的know_hosts中的相应指纹删除,再登陆回答yes,方可登陆
ssh public key解决密码登录问题
openssh的ssh-keygen命令用来产生私钥和公钥(非对称加密)
#ansible@client产生公钥和私钥(生成的私钥和公钥在家目录的.ssh文件夹下)
[ansible@client]ssh-keygen -b 1024 -t dsa
#client把公钥分发到ansible@server家目录的.ssh文件夹下 .ssh的权限必须为700 否则ssh会拒绝无密码登录
[ansible@server]mkdir /root/.ssh;chmod 700 /root/.ssh
[ansible@client]scp -p 10002 /home/ansible/.ssh/id_dsa.pub ansible@192.168.1.20:~/.ssh/authorized_keys #以后添加其它主机的公钥叠加到authorized_keys文件 >>
#test
[ansible@client]ssh -p 10002 ansible@192.168.1.20 'sudo cat /etc/shadow'
#相关脚本
1 #!/bin/bash 2 #2014-8-13 3 4 stuff="gtv_ma_1029_M325.apk" 5 6 array_node[0]="*"#ip以*代替 保护隐私 7 array_node[1]="*" 8 array_node[2]="*" 9 array_node[3]="*" 10 array_node[4]="*" 11 array_node[5]="*" 12 array_node[6]="*" 13 #到各节点上找出$stuff文件 并计算出md5值 14 for i in ${array_node[*]} 15 do 16 printf "$((++n)):%s %s " $i $(ssh -p 10002 root@$i "find / -name $stuff -type f -exec md5sum {} ; 2>/dev/null | cut -d ' ' -f1") 17 done