2010-06-10 50 views
1

我有一個tcl腳本,從bash調用了很多函數,包括ssh。我與掙扎看起來像這樣的部分:如何從調用bash的Tcl腳本驗證密鑰?

proc connect {where} { 
    set bash c:/cygwin/bin/bash 
    catch {exec $bash -c "ssh $where"} result 
    puts $result 
} 
connect [email protected] 

我得到驗證失敗消息:

Pseudo-terminal will not be allocated because stdin is not a terminal. 
Permission denied, please try again. 
Permission denied, please try again. 
Permission denied (publickey,password,keyboard-interactive). 

我無法弄清楚如何提示(或者顯示控制檯或TK窗口,並不重要)用戶輸入密碼,以便驗證通過。

我使用bash到SSH的原因是因爲最終我想連接到與腳本github上(需要提示輸入密碼)。

+0

添加-t -t爲SSH擺脫了第一的錯誤,對於預期,「對於密碼短語不幸地不起作用 – Jack 2010-06-10 18:38:03

回答

2

試試這個:

puts -nonewline "enter your passphrase: " 
flush stdout 
gets stdin passphrase 
exec $bash -c "ssh $where" << $passphrase 

<<參數exec其標準輸入傳遞給定值的命令

如果不工作,你必須嘗試期待,或使用沒有密碼的密鑰。

+0

+1。過去很簡單的東西,它是一個偉大的(Tcl)庫,用於自動執行任務「就好像腳本是用戶一樣」。 – RHSeeger 2010-06-11 16:21:22

0

一個重要的選擇(我建議)是設置一個本地密鑰處理代理(例如,ssh-agentpageant)來保存解密的密鑰,以便您的代碼根本不需要處理密碼。我覺得這是整個一個更簡單的方法,因爲它停止了很多的代碼無需瞭解有關密碼的任何東西(這是很難正確地比你想象的處理...)