#! /bin/sh
 #################################################### 
#          This Script is used for
#establish the SSH trush between hosts automatically!
#     
#       V1.1  Wrote By Mr.g          2012.3.9
#
####################################################
 #远程主机1(源主机)
src_host=$1
src_user=$2
src_passwd=$3

#远程主机2(目标主机)
dst_host=$4
dst_user=$5
dst_passwd=$6
src_pub=/root/.ssh/id_rsa.pub
 #在远程主机1上生成公钥
Keygen()
 {
        expect << EOF        
        spawn ssh $src_user@$src_host "test -f /root/.ssh/id_rsa.pub || echo CheckFalse 
        expect {
                        "password:" {
                                send "$src_passwd\n"
                                }                         
                         eof { exit }
                        }
               
        expect CheckFalse { exit 11 }   
EOF
      
if [ $? -ne 11 ];then
echo -n "公钥已经存在,将直接拷贝……"               
else
 
echo -n "公钥不存在,开始创建……"               
expect << EOF
 

spawn ssh $src_user@$src_host "ssh-keygen -t rsa "
while {1} {
         expect {
                "password:" { 
                        send "$src_passwd\n"
                 }                               
                                "yes/no*" {
                                         send "yes\n"
                               }
                              
                                "Enter file in which to save the key*" {
                                        send "\n"
                               }
                             
                                "Enter passphrase*" {
                                        send "\n"
                                }
                         
                                "Enter same passphrase again:" {
                                        send "\n"
                                }
                          
                                "Overwrite (y/n)" {
                                        send "n\n"
                                }
 
                                eof {
                                        exit
                                }       
                        }
                }
 
EOF
fi
}

#从远程主机1上拷贝公钥到远程主机2上
Get_pub ()
 {
         expect << EOF        
        spawn scp $src_user@$src_host:$src_pub $dst_user@$dst_host:/root/.ssh/$src_host   
        expect {
                "password:" {
                        send "$src_passwd\n";exp_continue
                }
                
                "password:" {
                        send "$dst_passwd\n";exp_continue
                }
                
                "yes/no*" {
                        send "yes\n";exp_continue
                }
           
                eof {
                        exit
                }
        }            
EOF

#在远程主机2上将内容追加到authorized_keys 
Put_pub()
{
        expect << EOF 
        spawn ssh $dst_user@$dst_host "mkdir -p /root/.ssh;chmod 700 /root/.ssh;cat /root/.ssh/$src_host >> /root/.ssh/authorized_keys;chmod 600 /root/.ssh/authorized_keys"
 
        expect { 
                "password:" {
                         send "$dst_passwd\n";exp_continue
                 }
                
                "yes/no*" {
                        send "yes\n";exp_continue
                }
 
                eof{
 
                        exit
                }
        }
EOF 
}

Keygen 
Get_pub 
Put_pub

 

使用方法:

  1. ssh-trust.ssh 192.168.1.1 root 123456 192.168.1.2 root 123456
复制代码

当然也可以将这些IP地址用户名和密码写入到一个配置文件config里

192.168.1.1 root 123456 192.168.1.2 root 123456
192.168.1.3 root 123456 192.168.1.4 root 123456

然后使用

  1. xargs -n6 ./ssh_trust.sh < config
复制代码

代码的原理比较简单,主要就是使用expect