只要你的本地机器有一台运行SSH服务器(和你的应用程序有必要的登录凭据),您可以使用JSch连接到本地计算机,太 - 只是表明localhost
(或127.0.0.1
)作为主机名为连接。
虽然这会产生一些开销,因为您正在加密和解密所有数据,而这在本地执行某些命令并不是必须的。 (在另一方面,这将允许您以其他用户,对此你,否则将需要在Windows下像sudo
或su
,或者RunAs
运行命令。)
JSch上的顶部实现setOutputStream
和setErrStream
相应的get...
方法 - 它在内部使用类似于PipedInputStream的东西,以及在这些流之间铲取数据的独立线程。
由于JSch是开源的,你可以简单地看一下如何做到这一点(在Channel
类,如果我没记错的话),并复制相关的方法向类中做同样的事情了Process
。
有没有办法告诉JSch不要加密数据?
您可以使用none
密码,例如,没有加密。这在所有通用客户端和服务器上都是禁用的(因为它违背了SSH的一半目的),但通过正确的配置,您可以启用它。在JSch你可以使用
session.setConfig("cipher.s2c", "none,..."); // server to client
session.setConfig("cipher.c2s", "none,..."); // client to server
(这个配置选项的客户端支持所有选项的列表 - 见the documentation of setConfig
所有受支持的值,服务器通常会选择这个名单,它也支持的第一个。强制不加密(或取消连接),仅列表none
。)
我不知道如何在SSH服务器中启用此功能 - 请阅读服务器的文档。 (并且如果可能的话,仅对本地主机启用它。)
推荐使用它的方式是仅在认证后切换到none
密码(因此认证仍然是加密的),但对于本地主机,这可能不是必需的。 (您可以使用session.rekey()
在更改配置后切换密码(和密钥)。)
有没有办法告诉JSch不要加密数据? –
我意识到ssh是为了加密,但仍然 –
@Martin:我添加了一些关于非密码的东西。 –