Java 后续行动:在还必须切换用户时使用JSch到SFTP

Java 后续行动:在还必须切换用户时使用JSch到SFTP,java,sftp,scp,jsch,su,Java,Sftp,Scp,Jsch,Su,这是以下方面的后续行动: 自从我在我们的服务器管理团队审查他们的策略时提出最初的问题以来,这个问题就一直被搁置,但我现在又重新提起它 我想做的是使用JSch连接到远程服务器,然后使用sftp或scp访问一些文件——正如原始问题中的代码示例所示。问题是这些文件属于另一个用户,因此我需要向该用户发送su,然后在发出sftp或scp命令之前提供密码 这不能在JSch中完成,这是正确的,因为能够通过exec通道发送密码存在安全风险。这些是我看到的未来的选择 重写JSch功能。Martin在回答原始问题

这是以下方面的后续行动:

自从我在我们的服务器管理团队审查他们的策略时提出最初的问题以来,这个问题就一直被搁置,但我现在又重新提起它

我想做的是使用JSch连接到远程服务器,然后使用sftp或scp访问一些文件——正如原始问题中的代码示例所示。问题是这些文件属于另一个用户,因此我需要向该用户发送su,然后在发出sftp或scp命令之前提供密码

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

  • 重写JSch功能。Martin在回答原始问题时提供了一些非常有用的指导,如如何通过“后门”输入密码以及如何通过“后门”输入密码。但我对自己重写JSch代码的能力没有信心,而且即使成功,我也会再次规避出于合法原因而存在的安全特性,因此我不愿意尝试这样做

  • 在服务器上,将“我的用户密码”权限授予其他用户。这是否定的,因为我的服务器管理团队不会同意这一点

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

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

  • 放弃!我是否应该接受我正在尝试做的事情不应该是自动化的,而应该只是手动测试

  • 如有任何想法/指导,我将不胜感激

    我正在尝试做一些不应该自动化的事情

    原则上这是正确的

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


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

    我只想与大家分享,我通过修改示例JSch示例JumpHosts,找到了解决此问题的方法

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

    jcraft团队提供了如此有用的工作示例,这太棒了。感谢每一个花时间阅读和思考我的问题的人。
    编辑:根据Martin的评论,我应该指出,只有在SSH配置中有一个特殊规则,允许直接用户2从本地主机登录(而不允许直接远程登录)时,这才有效。那不是苏多。因此,这在一般情况下是行不通的。

    非常感谢您总是抽出时间来解决这些问题,Martin。您已经证实了我的想法-您是对的,我的管理员将不允许我作为其他用户直接访问。我会让我的团队了解我们在stackoverflow上的交流,希望我们都同意,这个特定的测试至少需要一些手动步骤。端口转发示例与sudo有什么关系?如果您用两个参数调用端口转发示例:user1@hostname及user2@localhost其中user1是我的个人用户user2是一个可以访问我想要的文件(user1没有直接访问权限)的用户,它的工作非常棒!但是,只有在SSH配置中有一个特殊规则,允许直接
    user2
    localhost
    登录(而不允许直接远程登录)时,这才有效。那不是苏多。所以这在一般情况下是行不通的。答案中值得一提。