我花了很多时间开发一个应用程序,该应用程序将使用 JSch 并通过 ssh 连接到远程计算机以执行一些命令行操作。但是我了解到这些操作也可以在本地主机上执行(我的应用程序在本地主机上运行)。现在...我懒得重写所有代码,老实说我感觉很糟糕,因为我真的很喜欢 JSch。有没有办法欺骗 JSch 连接到 localhost,或者以某种方式告诉它只使用 localhost,即使代码另有说明?:)
PS,如果不可能,为什么常规 Proccess 类不像 JSch 那样支持 setOutputStream 和 setErrStream,而只支持 getInputStream 和 getErrorStream ?
只要您的本地计算机正在运行 SSH 服务器(并且您的应用程序具有必要的登录凭据),您也可以使用 JSch 连接到本地计算机 - 只需指示localhost(或127.0.0.1) 作为连接的主机名。
不过,这会产生一些开销,因为您正在加密和解密所有数据,这对于本地执行某些命令来说并不是真正必要的。(另一方面,这将允许您以另一个用户身份运行命令,否则在 Windows 下您将需要类似sudo或su, 或 之类的命令RunAs。)
JSch在相应的方法之上实现了setOutputStream和- 它在内部使用类似于 PipedInputStream 的东西以及一个在这些流之间传输数据的单独线程。setErrStreamget...
由于 JSch 是开源的,您可以简单地看看这是如何完成的(在Channel类中,如果我没记错的话),并将相关方法复制到您的类中,该类对Process.
有没有办法告诉 JSch 不要加密数据?
您可以使用none密码,例如不加密。默认情况下,所有通用客户端和服务器都禁用此功能(因为它破坏了 SSH 的一半目的),但通过正确的配置,您可以启用它。在 JSch 中你可以使用
session.setConfig("cipher.s2c", "none,..."); // server to client
session.setConfig("cipher.c2s", "none,..."); // client to server
Run Code Online (Sandbox Code Playgroud)
(此配置选项是客户端支持的所有选项的列表 - 请参阅文档以了解setConfig所有支持的值。服务器通常会选择它也支持的该列表中的第一个。要强制不加密(或取消连接),仅列出none。)
我不知道如何在 SSH 服务器中启用此功能 - 请阅读服务器的文档。(如果可能的话,只为本地主机启用它。)
推荐的使用方法是none仅在身份验证后才切换到密码(因此身份验证仍然是加密的),但对于本地主机来说,这可能不是必需的。(您可以session.rekey()在更改配置后用于切换密码(和密钥)。)
| 归档时间: |
|
| 查看次数: |
5167 次 |
| 最近记录: |