加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 04:38:35 所属栏目:大数据 来源:网络整理
导读:? ? [[email?protected] ssh] # cat auto_ssh.sh # !/usr/bin/expect -f # ######################################### # 通过SSH服务将id.pas.pub公钥推送到目标服务器实现免密登陆 # 参数:1.system_username # 2.system_password # 3.system_hostname # 4.

?

?

[[email?protected] ssh]# cat auto_ssh.sh 
#!/usr/bin/expect -f
##########################################
#通过SSH服务将id.pas.pub公钥推送到目标服务器实现免密登陆
#参数:1.system_username
#     2.system_password
#     3.system_hostname
#     4.CommandList [多个命令间;间隔]
#返回值:
#     0  成功
#     1  参数个数不正确
#     2  SSH 服务器服务没有打开
#     3  SSH 用户名密码不正确
#     4  连接SSH服务器超时
##########################################
proc usage {} {
    regsub ".*/" $::argv0 "" name
    send_user "Usage:n"
    send_user "$name system_username system_password system_hostname CommandListn"
    exit 1
}
if {[llength $argv] !=3} {
    usage
}

#设置变量值
set timeout 10 
set system_username [lindex $argv 0] 
set system_password [lindex $argv 1] 
set system_hostname [lindex $argv 2] 
#检查主机是否可达
spawn ping ${system_hostname} -w 2
expect {
 -nocase -re "100% packet loss" {
  send_error "Ping ${system_hostname} is unreachable,Please check the IP address.n"
  exit 1
 }
}
#超时时间
set timeout 60
set resssh 0
spawn ssh-keygen -t rsa
expect {
        "*file in which to save the key*" {
            send "nr"
            send_user "/root/.sshr"
            exp_continue
        "*Overwrite (y/n)*"{
            send "nnr"
        }
        }
        "*Enter passphrase*" {
            send "nr"
            exp_continue
        }
        "*Enter same passphrase again*" {
            send "nr"
            exp_continue
        }
}
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $system_username@$system_hostname
expect {
            #first connect,no public key in ~/.ssh/known_hosts
            "Are you sure you want to continue connecting (yes/no)?" {
            send "yesr"
            expect "password:"
                send "$system_passwordr"
            }
            #already has public key in ~/.ssh/known_hosts
            "password:" {
                send "$system_passwordr"
            }
            "Now try logging into the machine" {
                #it has authorized,do nothing!
            }
        }
expect eof

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读