• 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.
    "
                  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
    "
                            expect "password:"
                            send "$password
    "
                        }
                        #already has public key in ~/.ssh/known_hosts
                            "password:" {
                            send "$password
    "
                                }
                         "Now try logging into the machine" {
                         #it has authorized, do nothing!
                                }
                }
                expect eof
            puts "User: $user,	Password: xxxx,	IP: $ip,	Port: $port
    "
        }
        close $ip_file    
        exit 0
    } elseif {[file isfile /root/.ssh/id_rsa]} {
        puts "/root/.ssh/id_rsa file exists	
    File 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 "
    
    "
            send_user "/root/.ssh
    "
            exp_continue
        "*Overwrite (y/n)*"{
            send "n
    
    "
        }
        }
        "*Enter passphrase*" {
            send "
    
    "
            exp_continue
        }
        "*Enter same passphrase again*" {
            send "
    
    "
            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.
    "
              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
    "
                expect "password:"
                send "$password
    "
                }
                #already has public key in ~/.ssh/known_hosts
                "password:" {
                send "$password
    "
                }
            }
        puts "User: $user,	Password: xxxx,	IP: $ip,	Port: $port
    "
    }
    close $ip_file
    
    expect eof
  • 相关阅读:
    SNF软件开发机器人-子系统-功能-启用大按钮样式如何配置
    SNF软件开发机器人-子系统-功能-数据录入方式
    SNF软件开发机器人-子系统-功能-功能类型(普通表改为树型表)
    SNF软件开发机器人-子系统-导出-导入功能-多人合作时这个功能经常用到
    SQL SERVER数据库删除LOG文件和清空日志的方案
    打不开磁盘“I:xxx.vmdk”或它所依赖的某个快照磁盘
    chrome浏览器解决跨域问题
    AngularJS判断checkbox/复选框是否选中并实时显示
    非常全的VsCode快捷键
    Oracle&SQLServer中实现跨库查询
  • 原文地址:https://www.cnblogs.com/nb-blog/p/10488815.html
Copyright © 2020-2023  润新知