2010-11-17 59 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?