shell指令碼之 對於 非ssh expect 免密登陸問題
背景:一般為了安全hadoop生產叢集與公司其他伺服器不能ping,不能互相ssh免密登入的。絕大多數是hadoop叢集伺服器可以有賬號密碼可以登入到其他伺服器,但其他伺服器,不可以登入到公司hadoop叢集伺服器。業務需要 從一臺非業務伺服器上scp拉取資料,這時用到 expect遠端登入
先看有無 安裝 rpm -qa |grep expect
有略過此步驟,沒有 安裝 yum install expect
注意點:指令碼是 業務_功能.exp
指令碼:
#!/usr/bin/expect
#預設是秒,-1是一直保持連線
#set timeout 1000
set passwd "xxxx"
spawn scp -r
#如果遇到提示
expect "*password:*"
#則 \n回車確認
send "$passwd\n"
#如果伺服器你的賬號是普通使用者則 ]$,超級使用者是 ]# ,這裡用]*萬用字元
expect "]*"
#這裡我這業務完了遇到]*就退出,不能一直讓它掛著。
send "exit\r"
expect eof
例二:
#!/usr/bin/expect
#defalut s
#set timeout 1000
set passwd "xxxxxx"
#登入
spawn ssh [email protected]
expect "*password:*"
send "$passwd\n"
expect "]*"
send "rm -rf /home/work/thunderbird_loaded/*\n"
expect "]*"
send "exit\r"
expect eof
執行命令 expect 業務_功能.exp
如果想更多更快速瞭解,看看這篇文章:https://www.cnblogs.com/iops/p/expect-tutorial-and-example.html