1. 程式人生 > >shell指令碼之 對於 非ssh expect 免密登陸問題

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

[email protected]:/home/work/thunderbird_loaded /opt/user/work/thunderBird/

#如果遇到提示
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