2010-11-17 55 views
2

我有一個使用ssh密鑰連接到特定用戶的遠程服務器的腳本。但是,id用戶信息已更改且密鑰未更新,腳本將掛起等待密碼。在Perl中提示輸入密碼時死亡

當系統提示輸入密碼時,如何捕獲並丟棄DIE?

例如,如果我使用:

system("ssh -C [email protected] -i /.ssh/USER.key ..."); 

和USER不在USER.key相同的用戶,它掛在等待一個密碼。我寧願讓它死亡。

不使用perl模塊來處理這個問題的最佳方法是什麼?

+1

這個問題不是關於Perl,而是關於如何調用'ssh'命令行客戶端。 – 2010-11-17 17:01:24

回答

7

試試這個:

system('ssh -o BatchMode=yes -C [email protected] -i /.ssh/USER.key ...'); 

的批處理模式選項將防止SSH提示輸入密碼,如果需要密碼將簡單地終止。

+0

你也應該使用警告。 – 2010-11-17 16:48:14

+0

我假設這是一個較大腳本中的一行。我不會在所有腳本片段中拋出'使用警告',非常感謝。 – cdhowie 2010-11-17 16:49:13

+4

使用'warnings',即使是這一行代碼片段,也會在這一行(和OP中)指出一個可能的錯誤。 – mob 2010-11-17 16:52:10

4

當您使用這樣的system時,您將控制權交給ssh。我建議你看看ssh的選項。您也可以使用warnings

0

你是否考慮過使用從CPAN提供的任何SSH模塊作爲Net :: SSH2或Net :: OpenSSH?