只要您的本地计算机运行着 SSH 服务器(并且您的应用程序具有必要的登录凭据),您也可以使用 JSch 连接到本地计算机 - 只需将 localhost(或 127.0.0.1)表示为连接的主机名。
不过,这会产生一些开销,因为您正在加密和解密所有数据,而在本地执行某些命令并不是真正需要的。 (另一方面,这将允许您以其他用户的身份运行命令,否则您需要在 Windows 下使用 sudo 或 su 或 RunAs 之类的东西。)
JSch 在相应的 get... 方法之上实现了 setOutputStream 和 setErrStream - 它在内部使用类似于 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 服务器中启用此功能 - 请阅读您服务器的文档。 (如果可能,请仅对 localhost 启用它。)
推荐的使用方法是仅在身份验证后切换到none 密码(因此身份验证仍然是加密的),但对于 localhost 可能没有必要。 (更改配置后可以使用session.rekey()切换密码(和密钥)。)