gpt4 book ai didi

java - 我可以使用 Jsch 来伪造与本地主机的 ssh 连接吗?

转载 作者:行者123 更新时间:2023-12-01 19:14:58 25 4
gpt4 key购买 nike

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

附注如果不可能,为什么常规 Proccess 类不像 JSch 那样支持 setOutputStream 和 setErrStream,而只支持 getInputStream 和 getErrorStream ??

最佳答案

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

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

JSch 在相应的 get... 方法之上实现了 setOutputStreamsetErrStream - 它在内部使用类似于 PipedInputStream 的东西,并且一个单独的线程,用于在这些流之间传输数据。

由于 JSch 是开源的,您可以简单地查看这是如何完成的(在 Channel 类中,如果我没记错的话),然后将相关方法复制到您的类中,该类可以执行相同的操作一个进程

Is there a way to tell JSch not to encrypt the data?

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

session.setConfig("cipher.s2c", "none,...");  // server to client
session.setConfig("cipher.c2s", "none,..."); // client to server

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

我不知道如何在 SSH 服务器中启用此功能 - 请阅读服务器的文档。 (如果可能的话,只为本地主机启用它。)

推荐的使用方法是仅在身份验证后才切换到 none 密码(因此身份验证仍然是加密的),但对于本地主机来说,这可能不是必需的。 (更改配置后,您可以使用 session.rekey() 切换密码(和 key )。)

关于java - 我可以使用 Jsch 来伪造与本地主机的 ssh 连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7101447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com