2014-09-27 63 views
1

我試圖通過小型bash腳本執行expect命令以使用密鑰身份驗證方法登錄到服務器。我的腳本如下:預計不會在我的Bash腳本中工作

#!/bin/bash 
HOST=$1 
/usr/bin/expect -c " 
        spawn ssh -i /root/.ssh/id_rsa [email protected]$HOST 
        expect -exact "Enter passphrase for key '/root/.ssh/id_rsa': " ; 
        send "PASSPHRASE\n" ; 
        interact 
        " 

輸出,錯誤是:

spawn ssh -i /root/.ssh/id_rsa [email protected] 
couldn't read file "passphrase": no such file or directory 

你能幫助糾正呢?

+0

有人可以幫忙嗎? – John 2014-09-27 17:49:58

+1

考慮使用'ssh-agent'而不是'expect'。 – jordanm 2014-09-27 18:26:46

+0

@jordanm謝謝。你能告訴我爲什麼你在這裏建議使用ssh-agent?以及使用它的目的是什麼? – John 2014-09-28 07:02:29

回答

3

代碼中存在引用問題。不要試圖在命令行上將命令傳遞給expect,而是將您的代碼保存爲Expect腳本。然後您可以從shell腳本或其他程序運行它。

script.exp

#!/usr/bin/expect 
# usage: ./script.exp host 
set HOST [lindex $argv 0] 
spawn ssh -i /root/.ssh/id_rsa [email protected]$HOST 
expect -exact "Enter passphrase for key '/root/.ssh/id_rsa': " 
send "PASSPHRASE\n" 
interact 

然而,如果這一切你與做在這種情況下,期待我的第二個建議使用ssh-agent代替。

+0

非常感謝你:)這個爲我工作。 你也可以告訴我你爲什麼建議使用ssh-agent?使用它的目的是什麼? – John 2014-09-28 07:01:27

+0

不客氣!如果我的答案解決了您的問題,請單擊其左側的複選框以接受它作爲答案。至於'ssh-agent',它可以用來避免每次登錄會話時必須多次輸入密鑰的密碼短語,而不要以明文形式保存該密碼短語。你可以在http://mah.everybody.org/docs/ssh閱讀。 – nwk 2014-09-29 11:11:42

+0

非常感謝:)上帝保佑 – John 2014-09-29 15:30:30