2011-04-09 23 views
0

閱讀我想寫一個shell腳本,它類似於下面的從shell腳本內傻瓜程序運行以爲它是從一個終端

while read line; do 
echo $line 
done<input.txt | ssh > output.txt 

這是目前有點假的codeY (原文在工作),但你應該能夠說出它在做什麼。對於簡單的應用程序來說,這是一種享受,但ssh會檢查輸入以查看它的stdin是否是終端。

有沒有辦法欺騙ssh認爲我的管道迴路的內容是終端而不是管道?

編輯:對不起,不最初加入這個,這是爲了讓SSH通過shell腳本登錄(回答密碼提示)

+0

冷靜下來,不要以爲我沒有意識到這一點。這是當前的方法,但是要將密鑰放在服務器上,它仍然需要提示一次輸入密碼。 – linead 2011-04-10 00:33:24

+0

首先,**你**只是編輯你的問題,說你需要一些虛假的鍵盤登錄。我做了**不是那樣**。如果你想顛覆這一點,讓你的密鑰在某些服務器上,那麼就沒有安全密鑰了。順便說一句,將用一個更有幫助的提示更新我的答案。 – sehe 2011-04-10 00:36:07

+1

如果它的ssh - 你不能創建一個符合shh的'SSH_ASKPASS' env var?的腳本嗎? (SSH(1))。只是一個想法,沒有嘗試 – nhed 2011-04-10 01:02:51

回答

2

更新

這個問題(更新你的問題和各種意見後,很明顯你正在尋找一種方式來方便地獲取公共密鑰加密到位)或許可以通過「思維倒掛」來解決。

您可以嘗試從服務器接收經過身份驗證的身份(私鑰),而不是非常努力地將您的客戶公鑰導入尚未驗證客戶端的服務器上。

簡單的術語:在服務器上而不是客戶端上生成密鑰對,然後找到一種方法來獲取客戶端上的密鑰對。服務器可以提前將公鑰置於其authorized_keys中,以便客戶端可以立即連接。

機會是

  • 的拿到鑰匙跨越更容易解決了這個問題(你甚至可以使用「羣組」鍵從不同的客戶端訪問)
  • 如果安全性較低的機制選擇(方便而不是安全)至少只有客戶端的安全性降低了,而不是服務器(直接)的安全性。

原來的答覆:

簡短的回答:不。 (這將是ssh的安全漏洞,因爲ssh'信任'tty輸入密碼,而tty只是)

長的答案,你可以嘗試顛覆/創造性地使用終端模擬器(看腳本/ scriptreplay爲靈感)。

你爲什麼要這樣做?

+0

我不明白這是一個安全漏洞,我可以例如使用一個密鑰,然後不需要密碼並一次一個地傳遞我的命令。 – linead 2011-04-10 00:21:57

+0

那麼,你清楚地表明,另一個app_(**不是ssh **)需要一個tty。謹慎闡述? – sehe 2011-04-10 00:31:38

+0

對不起,這個問題應該更好。感謝您的回答,我將着眼於創造性地使用終端仿真器,因爲目標和目標都是可以互換的。我確實意識到這整個事情聽起來有多瘋狂;) – linead 2011-04-10 00:58:06

3

ssh -t -t會做你想要的東西 - 這告訴ssh來分配僞終端無論它是否真的在一個運行。

+0

僞終端不會被分配,因爲stdin不是終端 – sehe 2011-04-10 00:06:42

+0

@sehe:-t是「強制僞分配」。 – Erik 2011-04-10 00:07:59

+0

試試看:'echo hello | ssh -t localhost cat' – sehe 2011-04-10 00:10:57