只要您的本地计算机运行着 SSH 服务器(并且您的应用程序具有必要的登录凭据),您也可以使用 JSch 连接到您的本地计算机 - 只需将localhost
(或127.0.0.1
) 指示为连接的主机名。
但是,这会产生一些开销,因为您正在加密和解密所有数据,这对于在本地执行某些命令并不是真正必要的。(另一方面,这将允许您以另一个用户的身份运行命令,否则您将需要类似sudo
orsu
或RunAs
Windows 下的东西。)
JSch在相应的方法之上实现了setOutputStream
and ——它在内部使用类似于 PipedInputStream 的东西和一个在这些流之间铲起数据的单独线程。setErrStream
get...
由于 JSch 是开源的,您可以简单地查看这是如何完成的(在Channel
课堂上,如果我没记错的话),然后将相关方法复制到您的类中,该类对Process
.
有没有办法告诉 JSch 不要加密数据?
您可以使用none
密码,例如不加密。这在所有通用客户端和服务器中默认禁用(因为它破坏了 SSH 的一半用途),但通过正确的配置,您可以启用它。在 JSch 你可以使用
session.setConfig("cipher.s2c", "none,..."); // server to client
session.setConfig("cipher.c2s", "none,..."); // client to server
(此配置选项是客户端支持的所有选项的列表 - 请参阅文档以setConfig
获取所有支持的值。服务器通常会选择它也支持的列表中的第一个。强制不加密(或取消连接),仅列出none
。)
我不知道如何在 SSH 服务器中启用此功能 - 请阅读您的服务器文档。(如果可能,仅对 localhost 启用它。)
使用它的推荐方法是仅在身份验证后才切换到none
密码(因此身份验证仍然是加密的),但对于 localhost 这可能不是必需的。(您可以session.rekey()
在更改配置后使用来切换密码(和密钥)。)