当我从命令行执行此操作时,系统提示我输入 joe 的密码(这是我想要的):
ssh -t 192.168.1.32 'scp [email protected]:/etc/hosts /tmp'
当我尝试从 perl 脚本运行相同的命令时,它只是挂在那里(没有提示):
`ssh -t 192.168.1.32 'scp joe\@192.168.1.31:/etc/hosts /tmp'`;
我怎样才能通过 Perl 脚本完成这个工作?
注意:不,我不能对此使用基于密钥的身份验证。
答案1
您可以使用 Expect。请参阅https://stackoverflow.com/a/1366802
(以及有关此主题的 Expect 模块常见问题解答http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod#I_want_to_automate_password_entry_for_su/ssh/scp/rsh/... )
答案2
答案3
我以前也遇到过同样的问题。
它挂起的原因是 ssh 生成了一个用于输入密码的终端。Perl 无法捕获此终端(出于某种原因)。perl 从未见过“密码”字符串。
最好使用库(Net::SSH2 库或类似的东西)。