跟进:当还必须切换用户

时间:2017-04-24 10:13:06

标签: java sftp scp jsch su

这是一个跟进:

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. 自动执行一个putty会话,即从逻辑上打开putty,并从Java客户端逐行将命令传递给putty会话。

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

  6. 我会非常感激任何想法/指导。

2 个答案:

答案 0 :(得分:1)

  

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

原则上这是正确的。

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

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

答案 1 :(得分:1)

我只想通过调整示例JSch示例JumpHosts来分享我已经找到了解决此问题的解决方案。

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

覆盖静态类中的继承方法MyUserInfo允许我自动接受提示框,输入框等,而无需使用键盘,因此我可以根据需要进行全自动测试。

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

编辑:根据Martin的评论,我应该指出,只有在SSH配置中有一个特殊规则允许直接用户2从localhost登录(而不允许直接远程登录)时,这才有效。那不是sudo。所以这不能起作用。