2017-04-24 141 views
1

这是一个后续行动:后续行动:使用JSch到SFTP时,还必须切换用户

Using JSch to SFTP when one must also switch user

这个问题一直在脑后,因为我问了原来的问题,而我们的服务器管理团队审查他们的政策,但我现在正在重新选择它!

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

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

  1. 重写JSch功能。 Martin非常有帮助地提供了一些关于如何通过以及如何在“通过后门”传递密码的原始问题的答案中提供指导。但是我对自己无法重写JSch代码没有把握,再次,即使成功,我也会绕过一个出于合法原因出现的安全功能,所以我不愿意尝试这样做。

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

  3. 有一个服务器端.sh脚本,可以由我的用户运行以访问这些文件。再次,这是一个不,因为我的服务器管理团队不会同意!

  4. 使腻子会话自动化,即以phsically打开腻子并将命令从Java客户端逐行传递给腻子会话。

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

我会非常感谢任何想法/指导。

回答

1

我想在这里做一些不应该自动化的东西。

原则上这是正确的。

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

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

+0

非常感谢你总是花时间解决这些问题马丁。您已经确认了我的想法 - 而且您是对的,我的管理员不会允许我以其他用户的身份直接访问。我会让我的团队知道我们在stackoverflow上的交流,希望我们都会同意这个特定的测试需要至少有一些手动步骤。 –

1

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

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

重写在静态类MyUserInfo允许我自动接受提示框,输入框等而不物理不必使用键盘的继承的方法,所以具有一个完全自动化的测试如所期望。

jcraft团队提供这样有用的工作例子非常棒。感谢所有花时间阅读并考虑我的问题的人。

编辑:根据Martin的评论,我应该指出,只有在SSH配置中有特殊规则允许直接从localhost登录user2(但不允许直接远程登录)的情况下,这才有效。这不是sudo。所以这一般不起作用。

+0

端口转发示例如何与sudo相关? –

+0

如果使用两个参数调用端口转发示例:user1 @ hostname和user2 @ localhost其中user1是我的个人用户,user2是有权访问我想要的文件的用户(该用户1无法直接访问)它适合一种享受! –

+0

但是,只有在SSH配置中有一个特殊的规则允许直接从'localhost'登录'user2'(但不允许直接远程登录)的情况下,它才能工作。这不是sudo。所以这一般不起作用。值得一提的答案。 –