expect 批量自动部署ssh 免密登陆 之 三

#!/bin/expect --
########################################## zhichao.hu
#Push the id.pas.pub public key to the target server through the SSH service to implement secret-free login.
#Define an iplist Create an iplist file in the current directory. The content format is: User Password IPaddress Port
#parameter: 1.user
#           2.password
#           3.ip
#           4.Por
##########################################
if {[file isfile /root/.ssh/id_rsa.pub]} {
    puts "/root/.ssh/id_rsa.pub file exists"
    set ip_file [open ./iplist r]
    while {[gets $ip_file line] >= 0} {
        set user       [lindex $line 0]
        set password   [lindex $line 1]
        set ip         [lindex $line 2]
        set port       [lindex $line 3]
        spawn ping ${ip} -w 2
        expect {
             -nocase -re "100% packet loss" {
              send_error "Ping ${ip} is unreachable, Please check the IP address.\n"
              exit 1
             }
            }
        spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip
        expect {
                    #first connect, no public key in ~/.ssh/known_hosts
                       "Are you sure you want to continue connecting (yes/no)?" {
                          send "yes\r"
                        expect "password:"
                        send "$password\r"
                    }
                    #already has public key in ~/.ssh/known_hosts
                        "password:" {
                        send "$password\r"
                            }
                     "Now try logging into the machine" {
                     #it has authorized, do nothing!
                            }
            }
            expect eof
        puts "User: $user,\tPassword: xxxx,\tIP: $ip,\tPort: $port\n"
    }
    close $ip_file    
    exit 0
} elseif {[file isfile /root/.ssh/id_rsa]} {
    puts "/root/.ssh/id_rsa file exists\t\nFile not found in /root/.ssh/id_rsa.pub"
    exit 2
} else {
    puts "Create an rsa key pair..............................."
}


spawn ssh-keygen -t rsa
expect {
    "*file in which to save the key*" {
        send "\n\r"
        send_user "/root/.ssh\r"
        exp_continue
    "*Overwrite (y/n)*"{
        send "n\n\r"
    }
    }
    "*Enter passphrase*" {
        send "\n\r"
        exp_continue
    }
    "*Enter same passphrase again*" {
        send "\n\r"
        exp_continue
    }
}
set ip_file [open ./iplist r]
while {[gets $ip_file line] >= 0} {
    set user       [lindex $line 0]
    set password   [lindex $line 1]
    set ip          [lindex $line 2]
    set port        [lindex $line 3]
    spawn ping ${ip} -w 2
    expect {
         -nocase -re "100% packet loss" {
          send_error "Ping ${ip} is unreachable, Please check the IP address.\n"
          exit 1
         }
        }
    spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip
    expect {
            #first connect, no public key in ~/.ssh/known_hosts
            "Are you sure you want to continue connecting (yes/no)?" {
            send "yes\r"
            expect "password:"
            send "$password\r"
            }
            #already has public key in ~/.ssh/known_hosts
            "password:" {
            send "$password\r"
            }
        }
    puts "User: $user,\tPassword: xxxx,\tIP: $ip,\tPort: $port\n"
}
close $ip_file

expect eof

 

转载于:https://www.cnblogs.com/nb-blog/p/10488815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值