问题:需要从java实用程序为ssh / scp提供密码。 (这通常是个糟糕的想法,但这只是在开发环境中,对于一组共享通用密码的机器而言)。遗憾的是,我们无法访问我们尝试运行此新程序的计算机上的sshpass或expect实用程序。所以,我研究了原始文件描述符操作,但这也引起了一些麻烦。
在命令行上进行手动操作,假设我打开了两个端子:
终端一:
在密码提示下留下ssh
终端二:
在ps中找到终端1中ssh的进程id(称之为procid)
cd / proc /< procid> / fd /
ls -la显示所有文件描述符指向类似/ dev / pts / 2的伪终端
我尝试使用echo“password”>写入/ dev / pts / 2。 / dev / pts / 2,但是ssh似乎忽略了写入。密码确实会显示在终端1上,就像我手动输入密码一样,但这里没有任何用处。
我想从java生成ssh作为子进程并写入文件描述符,但很像我们在终端中的手动实验,这似乎不起作用。 (注意:当ssh检测到没有tty时,ssh的行为会有所不同,所以我也考虑过使用ssh而不是普通的ssh脚本程序,或者是否有更好的解决方案来处理这个问题?)。
我正在尝试做什么(或类似的事情)可能吗?