#! /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 "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 << EOFspawn ssh "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 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 "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
使用方法:
- 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 然后使用- xargs -n6 ./ssh_trust.sh < config
代码的原理比较简单,主要就是使用expect