2015-10-07 23 views
1

我一直在尋找在谷歌這一點,但不是很多人似乎寫的bash CGI ...慶典CGI遠程ssh

所以我有一個在瀏覽器上運行,並採取用戶輸入一個小CGI bash腳本,並它應該遠程SSH到遠程服務器並獲得其正常運行時間並將其存儲在臨時文件中。

ssh密鑰交換已完成,我可以在沒有密碼的情況下ssh進入該方框。 我知道變量正在傳遞腳本,因爲它確實回顯了用戶輸入的內容。 而且我知道它會嘗試用ssh對遠程主機執行某些操作,因爲當點擊提交時頁面會加載一段時間。

但是,當我看着臨時文件時,什麼都沒有,所以不知怎的,ssh失敗了,但沒有留下任何錯誤。

任何人都有使用CGI bash的遠程ssh的經驗?

#!/bin/bash 
echo "Content-type: text/html" 
echo '<html>' 
echo '<head>' 
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">' 
echo '</head>' 
echo '<body>' 

echo "<form method=GET action=\"${SCRIPT}\">"\ 
    '<table nowrap>'\ 
     '<tr><td>Input</TD><TD><input type="text" name="name" size=12></td> </tr>'\ 
       '</table>' 

echo '<br><input type="submit" value="Process Form">'\ 
    '<input type="reset" value="Reset"></form>' 

NAME=`echo "$QUERY_STRING" | sed -n 's/^.*name=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"` 

echo "NAME: " $NAME 
ssh -o ConnectTimeout=3 -q $NAME uptime > /var/tmp/uptime 
cat /var/tmp/uptime 
+0

不要你所需要的內容類型之間的空行實際內容? – 123

+0

哦,我有,我剛剛刪除該行,以節省後的空間:) – chrissk8er

回答

0

爲了您的SSH命令,你正在使用-q-o ConnectTimeout,因此如果打印連接超時錯誤消息。

如果你想調試ssh命令執行以下操作

ssh -o ConnectTimeout=3 $NAME uptime > /var/tmp/uptime 2>&1 

這樣,如果SSH失敗,你將有錯誤消息/var/tmp/uptime