跟进:当还必须切换用户时使用 JSch 到 SFTP

Follow up to: Using JSch to SFTP when one must also switch user

这是对以下内容的跟进:

自从我在我们的服务器管理团队审查他们的政策时提出最初的问题以来,这个问题一直被搁置,但我现在又开始讨论它了!

我想做的是使用 JSch 连接到远程服务器,然后使用 sftp 或 scp 访问一些文件 - 按照原始问题中的代码示例。问题是这些文件归另一个用户所有,因此我需要对该用户执行 su,然后在发出 sftp 或 scp 命令之前提供密码。

这不能在 JSch 中完成,这是正确的,因为能够通过 exec 通道发送密码存在安全风险。所以这些是我所看到的选项。

  1. 覆盖 JSch 功能。 Martin 在回答原始问题时提供了一些非常有帮助的指导,即如何完成以及如何在 "through the back door" 中传递密码。但是我对自己覆盖 JSch 代码的能力没有信心,而且即使成功了,我也会绕过出于正当理由而存在的安全功能,所以我不愿意尝试这样做。

  2. 在服务器上,将我的用户无密码访问权限授予其他用户。这是一个不,因为我的服务器管理团队不会同意这一点。

  3. 有一个服务器端 .sh 脚本,我的用户可以 运行 获得对文件的访问权限。再次声明,这是一个拒绝,因为我的服务器管理团队不会同意!

  4. 自动化 putty 会话,即物理打开 putty 并从 Java 客户端逐行向 putty 会话传递命令。

  5. 放弃!我是否应该接受我正在尝试在这里做一些不应该自动化的事情,而只是进行手动测试?

我将非常感谢任何 thoughts/guidance。

I am trying to do something here that should not be automated.

原则上是正确的。

唯一正确的自动解决方案是直接使用有权访问文件的用户登录。其他一切都只是黑客攻击或绕过您的安全策略。理想情况下,您应该使用专用私钥进行身份验证,以允许监控来自您的应用程序的访问并能够控制访问(例如临时关闭它,而不影响同一帐户的其他用途)。

虽然我可以想象你的系统管理员不会允许你直接登录,因为他们无法预见它带来的(如果有的话)安全问题。

我只是想分享一下,我已经通过调整示例 JSch 示例 JumpHosts 获得了解决此问题的解决方案。

http://www.jcraft.com/jsch/examples/JumpHosts.java

重写静态中的继承方法classMyUserInfo 允许我自动接受提示框、输入框等,而无需物理上使用键盘,所以我有一个完全自动化的测试。

jcraft 团队提供了如此有用的示例真是太好了。感谢所有花时间阅读和考虑我的问题的人。

编辑:根据 Martin 的评论,我应该指出,只有当您在 SSH 配置中有一个特殊规则允许 user2 从本地主机直接登录(但不允许直接远程登录)时,这才有效。那不是须藤。所以一般情况下这是行不通的。