2016-11-22 42 views
1

我想連接到路由器的子模塊,在其上運行一些命令並將輸出保存到文件中。我遇到的問題是子模塊需要用戶名和密碼,如果將所有命令放在單個腳本中,則會在出現提示輸入它們之前發送用戶名/密碼詳細信息。有沒有辦法在這些命令之間設置延遲,或者在相同的SSH會話下批量運行它們?Bash - SSH在它們之間有多個延遲命令

我用EOF方法,並且還具有在一個單獨的文件中的命令(首選):

ssh [email protected] > file.log << EOF 
session slot 1 # command to connect to the subslot. 
        # a delay of about 3 sec would be required before the credentials are sent 
slot_username 
slot_password 
command1 
command2 
command3 
exit 
exit 
EOF 

此外,第二齣口應該帶我出去的路由器,但它僅僅是忽略不計。

+0

我建議使用'expect'。 – Cyrus

+0

謝謝。最後我使用expect創建了一個腳本。我將它與一個bash腳本結合起來提示菜單並獲得用戶輸入。我確信有一個「更聰明」的方式來做到這一點,但我還沒有找到一種方法來獲得用戶輸入的期望和使用的數據作爲變量.. –

回答

1

我已經使用命名管道完成了此操作。創建一個命名管道並將其輸入發送到ssh命令。

mkfifo a=rw FOO 
cat FOO | ssh [email protected] > file.log 

然後,您可以從另一個腳本編寫命令爲FOO:

echo username >> FOO 
sleep 3 
echo password >> FOO 

但是...工具存在這樣做的,你在做什麼。它叫做clogin。請參閱文檔https://linux.die.net/man/1/clogin

+0

OP也可以檢查,看看本地系統是否有安裝「期望」軟件包/程序(如果我正確理解Q)。祝你們好運。 – shellter