Scenerio:我想通过ssh从Java程序在远程机器上运行命令(我在开发机器上使用OpenSSH).我还希望通过传递密码而不是像'expect'那样设置密钥来建立ssh连接.所以我没有错过标准错误...当我使用'-v'选项运行ssh时,我看到流中的所有日志记录但我没有看到提示.这是我第一次尝试使用ProcessBuilder这样的东西.我知道使用Python,Perl或者好的OL会更容易,但是我的老板想在现有的Java程序中利用我们想要的东西(远程日志文件和运行脚本),所以我有点卡住了.
问题:当尝试执行'expect'之类的密码登录时,使用ProcessBuilder创建的Process似乎看不到密码提示.当运行常规的非ssh命令(例如'ls')时,我可以获得流并与它们进行交互.我将标准错误和标准输出结合到一个流中redirectErrorStream(true);
在此先感谢您的帮助!
提示可能仅在ssh
连接到TTY时显示,而不是Java的情况.
可能有一种方法可以在ssh
应用程序的命令行中提供密码.这将是通过提示的方法.
或者,考虑从本机Java代码直接连接到主机服务器,而不是运行外部应用程序.有一百万个图书馆可以做到这一点.
为什么不使用Java ssh库,而不是使用外部ssh程序:
三铅
JTA
我找到了两个谷歌 - 这将避免openssh将努力工作以防止在stdin上输入密码的问题 - 它将直接打开终端.期望必须非常努力地模拟tty才能工作.
插件:看到此使用通过ssh执行一个命令的例子sshj