2012-06-11 26 views
1

我需要爲我在fstab中創建的ssh mount創建自動登錄腳本。如何使用expect來回復SSH登錄提示?

我知道你應該使用安全密鑰認證來做到這一點,但在這種情況下,它是不可能的,因爲服務器不允許它,所以我需要創建一個bash腳本來提示時輸入密碼。

我試圖與

spawn mount /media/SSH-MUSIC 

expect "*?assword:*" 

send "password\r" 

但我無法得到它的工作。

的fstab條目是如下

sshfs#[email protected]:/public/02.MUSIC /媒體/ SSH-MUSIC保險絲端口= 2223,NOAUTO,用戶,allow_other,UID = 1001,gid = 1001,rw 0 0

有人可以提供一個工作腳本,允許我自動登錄。我曾嘗試過使用Google提供的各種建議,但無法使用它。

+1

這不是一個Bash腳本,它是一個'expect'腳本。 –

回答

0

您可以嘗試sshpass實用程序。我認爲這比產卵期望更容易。

+0

我如何指定端口號?我在手冊中找不到如何傳遞它。 – reptilian

+0

在主機名後添加端口,如下所示:example.com:1234 – mzet

+0

我試過了,但它不起作用。它說「無法解析主機名」 – reptilian

0

我相信你忽略你的腳本行字符(\ n)的結束,你的第三個行應該是這樣的:

send "password\r\n" 
1

當您使用ssh,你可以使用一個密碼,或使用公鑰/私鑰集。如果您使用的公鑰/私鑰,您可以使用ssh到另一臺計算機而無需密碼進入:

  • 您需要運行兩個系統上ssh-keygen。這將在您的計算機上創建一個目錄$HOME/.ssh。裏面,將兩個文件:一個是公鑰,一個是私鑰。在我的公鑰中,私鑰叫做id_rsa,公鑰叫做id_rsa.pub。這是一旦你創建兩個系統上這些文件,你需要把你的公共密鑰並將其粘貼到一個名爲$HOME/.ssh/authorized_keys文件Linux和Mac OS X.

  • 默認。這將爲遠程計算機提供公鑰,以便識別您。

一旦做到這一點,你應該能夠使用ssh無需密碼,這使得使用ssh非常非常容易編寫腳本。

+0

+1,儘管我今天沒有投票; -/ –

+0

對不起,我已經在開場白中解釋過在服務器端無法做到這一點。 – reptilian

0

期望一般需要「\ r」作爲期望輸入的行終止符,輸出上需要「\ r \ n」。不過,在這種情況下,您並不需要掃描輸入上的回車符;它將以更簡單的正則表達式工作。

您大概可以將這項工作作爲一項內容。例如:

expect -c 'spawn mount /media/SSH-MUSIC 
      expect "assword:" {send "password\r\n"} 
      interact' 

您需要互動命令完成腳本命令後到生成過程的控制返回給用戶。

+0

該腳本似乎執行正常,但如果我試圖列出目錄的內容,我會得到「ls:無法訪問SSH-MUSIC:傳輸端點未連接」。目錄的屬性有?在他們旁邊。這在手動裝載期間不會發生,甚至不會在不正確的密碼上部分裝載。 – reptilian

+0

d ???????? ? ? ? ? ? SSH-MUSIC / – reptilian