2013-12-10 19 views
0

這是我期待的腳本,bash腳本調用:登錄到sudo的指望失敗 - BASH

1 #!/usr/bin/expect -f 
    2 
    3 set timeout 1 
    4 set user [lindex $argv 0] 
    5 set pw [lindex $argv 1] 
    6 
    7 spawn ssh [email protected] 
    8 expect "$" 
    9 send -- "cd /opt/Data/\r" 
10 expect "$" 
11 send -- "sudo su runtime\r" 
12 expect "*?assword for*" 
13 send -- "$pw\r" 
14 expect "$" 
15 send -- "./run.sh\r" 
16 expect "$" 
17 send -- "exit\r"; 
18 send -- "exit\r"; 
19 exit 

我的結果是:

[email protected]:~/Documents/scripts$ ./bashscript 
Enter your web password: 
spawn ssh [email protected] 
Last login: Tue Dec 10 11:10:37 2013 from [email protected] 
[[email protected] ~]$ cd /opt/Data/ 
[[email protected] /opt/Data]$ sudo su runtime 
[sudo] password for user: [email protected]:~/Documents/scripts$ 

通知的最後一行,我不是確定爲什麼密碼沒有通過。有任何想法嗎?

+1

嘗試:須藤-S的-S(標準輸入)選項導致須藤從 讀取密碼標準輸入,而不是終端設備。 – BaBL86

+0

在第12行,你確定這是你所期望的嗎?你可以嘗試:期望「*?密碼」 – user2196728

+1

在開發預期腳本時,始終使用'exp_internal 1'。預計會告訴你模式是否匹配。 –

回答

2

您也許可以在沒有預期的情況下執行此操作:查看您的系統的sudo是否有-S選項,該選項從標準輸入讀取密碼。

#!/bin/sh 
echo "$2" | ssh "$1"@remote sudo -S sh -c ./run.sh runtime