利用expect 工具批量分發公鑰給SVR,實現自動分發

expect是一個很好用的工具,他的亮點就是可以簡化會話的交互式操作,實現自動分發公鑰的功能,不要自己每一個都去輸入密碼或者IP了。這樣大大節約了運維工作的效率。

分發好的效果圖。

 

 

 因爲我們在第一次給我們的服務器分發公鑰的時候,每一個都需要確認輸入yes然後輸入密碼。這些工作本來是需要我們手動去輸入的,這就是交互式會話。

但是那麼多服務器,幾百幾千臺,我們每一個都去重複性的去輸入嗎?那太麻煩了。所有就有了expect可以自動輸入。

大概四個要領。

第一步,安裝軟件,

yum install expect -y

直接yum就安裝了,很方便。

然後批量新建用戶,本來批量新建用戶,這裏我們就直接在CRT裏直接批量新建了。

useradd oldgirl

echo 123456|passwd --stdin oldgirl

su - oldgirl

第二步,我們要備份自己的公鑰,然後把本機的私鑰移走到另外的目錄。因爲私鑰是不能給被人的,只要公鑰才能給別人。然後把公鑰備份一下,並把公鑰copy一份命名爲authorized_keys。

只能命名爲這個,這個就相當於是手動的運行ssh-copy-id  這個命令,懂的都懂。

 

第三步,設置自動分發的exp的腳本,

#! /usr/bin/expect
#這裏的意思是要輸入3個參數,如果不輸入三個參數就會輸出一句話
if { $argc !=3 } {
 send_user "usage: expect fenfauser-simple.exp file host dir\n"
 exit
}
#define var 定義了三個變量
set file [lindex $argv 0]
set host [lindex $argv 1]
set dir  [lindex $argv 2]
set password "123456"
spawn scp -P22 -r -p $file oldgirl@$host:$dir
#可能出現的對話框,然後send輸入
expect {
       "yes/no" {send "yes\r";exp_continue}
       "*password" {send "$password\r"}
}
expect eof
exit

相信這麼簡單的代碼,稍微有一點編程基礎的都可以看懂吧!此腳本的名字

fenfauser-simple.exp   

順便插入一個使用expect自動登入SSH的代碼。也很簡單。

#! /usr/bin/expect
set host "192.168.3.106"
set passwd "123456"
spawn ssh oldgirl@$host
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
expect eof
exit

 

第四步編寫shell腳本,

#!/bin/sh
. /etc/init.d/functions
for ip in `cat iplist`
do
  expect fenfauser-simple.exp /home/oldgirl/.ssh $ip /home/oldgirl >/dev/null 2>
&1
  if [ $? -eq 0 ] ;then
      action "$ip" /bin/true
  else
      action "$ip" /bin/false
  fi
done

此腳本的名字fenfa-sshkey.sh   這個腳本也很簡單,意思就是引入上面的exp腳本,然後輸入三個變量, 本地的公鑰位置,IP   ,遠程目錄的公鑰位置。

第五步,測試效果。

 

 

 把私鑰copy過來,把公鑰也改回來名字,單機測試了一下SSH可以連,不用密碼。

如果需要批量操作,就需要引用其他的腳本來實現了。例如批量取IP,批量分發hosts文件,批量安裝軟件等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章