利用expect腳本, 實現自動化將公鑰復制到多個遠程的主機

為了實現基于key的驗證,需要將本機的公鑰傳到多個遠程主機,傳給額過程中要輸入yes和密碼,如果遠程主機很多,人工一個個的輸入密碼浪費時間,expect腳本可以實現代替人工完成交互式的指令。

[root@centos7 app]#cat ip.txt 
zhang 172.18.21.106 123456
dufu 172.18.21.6 123456
[root@centos7 app]#cat ssh-copy-id.sh 
#!/bin/bash
#
cat /app/ip.txt |while read file;do
      username=`echo $file|cut -d ' ' -f1`
      ip=`echo $file|awk '{print $2}'`
      passwd=`echo $file|awk '{print $3}'`
expect << end  
---將expect利用多行重定向傳入當前腳本
set timeout 100  
----設置多長時間跳出expect,建議時間設置的長一點,如果沒有這一
行,默認的時間也很短,大概5秒,所以這一行要加上,并且把時
間設置的長一點,遠程主機比較多,可以設置的時間更長一點
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $username@$ip
expect {
"yes/no" { send "yes\n" ;exp_continue }  
---當捕捉到yes/no信號時執行yes\n命令,因為前面捕捉的信號為多個,所以后面要加上exp_continue
 "password" { send "$passwd\n" }
}
expect eof  
end
 done
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容