我可以使用Jsch伪造与localhost的ssh连接吗?

时间:2011-08-18 01:36:06

标签: java ssh jsch

我花了很多时间开发一个应用程序,它将使用JSch并通过ssh连接到远程机器来执行一些命令行操作。但是我了解到这些操作也可以在localhost上执行(我的应用程序在localhost上运行)。现在......我懒得重写所有的代码,说实话,我感觉很糟糕,因为我真的很依赖JSch。有没有办法欺骗JSch连接到localhost或者以某种方式告诉它只使用localhost,即使代码说不然? :)

P.S。如果不可能的话,为什么普通的Proccess类不支持setOutputStream和setErrStream,就像JSch一样,但只有getInputStream和getErrorStream?

1 个答案:

答案 0 :(得分:4)

只要本地计算机运行SSH服务器(并且您的应用程序具有必要的登录凭据),您也可以使用JSch连接到本地计算机 - 只需指示localhost(或{{1 }})作为连接的主机名。

但是,这会产生一些开销,因为您正在加密和解密所有数据,这对于在本地执行某些命令并不是必需的。 (另一方面,这将允许您以另一个用户身份运行命令,否则您需要在Windows下使用127.0.0.1sudosu等内容。)

JSch在相应的RunAs方法之上实现setOutputStreamsetErrStream - 它在内部使用类似于PipedInputStream的东西,并在这些流之间使用单独的线程来挖掘数据。 / p>

由于JSch是开源的,你可以简单地看看它是如何完成的(如果我没记错的话,在get...类中),并将相关的方法复制到你的类中,为{{{{{{ 1}}。

  

有没有办法告诉JSch不要加密数据?

您可以使用Channel密码,例如没有加密。默认情况下,在所有通用客户端和服务器中禁用此功能(因为它会破坏SSH的一半用途),但使用正确的配置可以启用它。在JSch中你可以使用

Process

(此配置选项是客户端支持的所有选项的列表 - 有关所有支持的值,请参阅the documentation of setConfig。服务器通常会选择它也支持的此列表中的第一个。强制不加密(或取消连接),仅列出none。)

我不知道如何在SSH服务器中启用它 - 阅读服务器的文档。 (如果可能的话,只为localhost启用它。)

建议使用它的方法是仅在身份验证后切换到session.setConfig("cipher.s2c", "none,..."); // server to client session.setConfig("cipher.c2s", "none,..."); // client to server 密码(因此身份验证仍然是加密的),但对于localhost,这可能不是必需的。 (更改配置后,您可以使用none切换密码(和密钥)。)