2013-07-15 130 views
0

我試圖從主帳戶密碼的SSH設置自動與其他從accounts.I有一個腳本命名爲AddSSH.ksh它做到這一點setup.When這個腳本手動運行裏面,它同一時間要求相同的密碼,它基本上使用scp複製密鑰。所有的奴隸賬戶都保存在一個文件env.txt。因此,我有一個shell腳本(run.ksh),它從這個文件(env.txt)中逐個讀取帳戶,然後使用expect腳本auto_ssh.ksh來處理交互,並輸入密碼因此。調用expect腳本shell腳本的while循環

env.txt

[email protected] 
[email protected] 
[email protected] 
[email protected] 

run.ksh

#!/usr/bin/ksh 

while read env 
do 

username=`echo $env | cut -d"@" -f1`; 
hostname=`echo $env | cut -d"@" -f2`; 
password='Unix_11' 
ssh -n -o PasswordAuthentication=no ${env} ' ' 2>/dev/null 
if [ $? -eq 0 ]; then 
     printf "\nConnection OK for : $env \n" 
else 
     expect auto_ssh.ksh $username $hostname $password 
fi 
done<env.txt 

auto_ssh.ksh

#!expect 
set timeout 6 
set user [lindex $argv 0] 
set machine [lindex $argv 1] 
set password [lindex $argv 2] 
spawn AddSSH.ksh $user $machine 
expect "password:" 
send "$password\r"; 
expect "password:" 
send "$password\r"; 
interact 

如果運行在S CRIPT auto_ssh.ksh

./auto_ssh.ksh account1 machine1 password 

它運行正常,但當我把它叫做shell腳本里面,這預計腳本將退出在第二password.when我跑在調試模式下的shell腳本,我看到的是不是發送密碼第二次它從env.txt讀取下一個env並退出。

這是在調試模式下輸出,其中失敗的線。

[email protected]'s password: + read env 

回答

0

exp_internal 1添加到預期腳本以進行其他調試。我懷疑你可能需要調整你所期望的:expect -re {password:\s*$}

如果您不需要實際上addSSH.ksh互動,改變interactexpect eof

爲什麼你期望的腳本有一個「.ksh」延伸?