2016-09-22 107 views
0

我意識到與此相關的風險,但是我仍然想要這樣做。如何使用expect來自動輸入SSH密碼?

我試圖遵循其他答案,但沒有成功。

基本上所有我想要的是在啓動時打開該SSH隧道。所以我正在製作一個腳本,我可以在系統啓動時將cron作業放在處。

到目前爲止,腳本是這樣的:

#!/usr/bin/expect -f 
spawn java -jar client.jar </dev/null &>/dev/null & 

spawn ssh -fN -i /home/my_user/.ssh/id_rsa -R 20001:localhost:22 [email protected]_host 
expect "*passphrase*" 
send "my passphrase\r" 

結果我這個得到的是,無論是Java進程保持運行(如果在所有甚至推出),並且無論是SSH連接保持活着(如果它甚至啓動並且密碼由send命令正確插入)。

我在這裏做錯了什麼?

謝謝!

+0

爲什麼你同時使用密鑰和密碼?如果你自己在終端輸入'ssh'命令,會發生什麼? – redneb

+0

它問我密碼。密碼與私鑰關聯 – PedroD

+2

如果您願意編寫腳本並在腳本中對密碼進行硬編碼,爲什麼不以未加密的形式存儲密鑰?如果您爲其他主機使用相同的密鑰,您也可以爲此創建一個專用密鑰。 – redneb

回答

-1

更好的嘗試autoexpect,這應該工作。

通過使用

sudo yum install expect 

或 命令和apt-get安裝期望

一旦安裝完成。鍵入命令autoexpect

它會顯示一個消息,象下面這樣:

Autoexpect started, file is script.exp

在此之後只是手動執行的活動和腳本爲你寫的。

這裏有一個例子 Automating-with-Expect-Scripts

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/13758827) – rghome

+0

Ok @rghome Fair足夠了,這裏是摘錄,安裝Autoexpect。通過使用sudo yum install expect或sudo apt-get install expect。一旦安裝完成。鍵入命令_autoexpect_ 它會顯示如下消息: Autoexpect started,file is script.exp 之後只需手動執行該活動,併爲您編寫腳本。 – user6863772

+0

你能編輯答案嗎? – rghome

1
  1. 對於產卵的java:期待的spawn不明白<&>&。您可以使用Tcl的exec命令,因爲您沒有與Java命令交互。

    exec java -jar client.jar </dev/null>& /dev/null &

  2. 對於產卵SSH:作爲Dinesh指出,必須添加expect eof或者它會不會等待ssh進程退出。

+0

@pedrod,如果您希望能夠在ssh會話中交互式輸入命令,請使用'interact'而不是'expect eof' –