首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当您还必须切换用户时,使用JSch对SFTP

当您还必须切换用户时,使用JSch对SFTP
EN

Stack Overflow用户
提问于 2017-03-23 12:24:54
回答 1查看 2.5K关注 0票数 3

我在Java中使用JSch连接到远程服务器,并使用SFTP获取一些文件。以下代码对我来说一直运行良好:

代码语言:javascript
复制
JSch ssh = new JSch();
JSch.setConfig(FileTransferConstants.STRICT_HOST_KEY_CHECKING, FileTransferConstants.NO);
Session session = ssh.getSession(userName, host, port);
session.setPassword(password);
session.connect();
Channel channel = session.openChannel(FileTransferConstants.SFTP);
channel.connect();
ChannelSftp sftp = (ChannelSftp) channel;
sftp.cd(remoteDirectoryPath);
sftp.lcd(localDirectoryPath);

sftp.get(remoteDirectoryPath + remoteFileName, remoteFileName);

问题是,现时地盘政策已有所改变。我不再被允许以这个用户的身份直接登录(userName )。我必须首先以个人用户的身份登录,然后再登录到访问我想要的SFTP文件的用户。

我不认为无论如何,我可以重构上面的代码来实现这一点,所以我已经开始考虑使用shell或exec通道代替。到目前为止,我并没有取得什么成功,我似乎在网上找不到任何例子,所以我非常感谢你在正确的方向上提供任何建议或建议。非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-23 14:25:54

我不认为您可以直接用JSch来完成这个任务。但是,通过对其代码进行一些修改,它可能是可行的。

请注意,我的回答假设服务器基于*nix(您对su__的引用支持的内容),并使用OpenSSH SFTP服务器。

您必须打开SSH "exec“通道,以执行以下操作:

代码语言:javascript
复制
sudo /bin/sftp-server

但是在这个通道的顶部,您需要构建ChannelSftp实例,而不是ChannelExec

因此,您需要实现Session.openChannel-like方法,该方法将打开exec通道,但为其创建ChannelSftp

有关一些背景,请参见 with WinSCP SFTP client

请注意,虽然FAQ声称您将不能使用密码的sudo,这是对WinSCP。但是,由于您完全控制了JSch的会话,所以您可以将密码提供给sudo

为此,在启动实际的SFTP会话之前,您可以重写ChannelSftp.start()将密码写入通道输入。

您仍然需要关闭requiretty选项,因为SFTP无法使用TTY。

有关使用不同/根帐户自动操作时的一般注意事项,请参见:

Allowing automatic command execution as root on Linux using SSH

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42975994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档