我认为您不能直接使用JSch来执行此操作。但是通过对其代码进行一些修改,它可能是可行的。
请注意,我的答案假设服务器是基于* nix的服务器(您对的引用支持su
),并且使用OpenSSH SFTP服务器。
您必须打开SSH“ exec”通道,才能执行以下操作:
sudo /bin/sftp-server
但是在该通道之上,您需要构建
ChannelSftp实例,而不是
ChannelExec。
因此,您将需要实现
Session.openChannel类似方法,该方法将打开
exec通道,但
ChannelSftp为此创建一个。
有关某些背景知识,请参见如何
sudo使用WinSCP
SFTP客户端。
请注意,尽管FAQ声明您将无法使用密码,但
sudoWinSCP却是这样。但是,由于您可以完全控制与JSch的会话,因此可以将密码提供给
sudo。
为此,您可以
ChannelSftp.start()在开始实际的SFTP会话之前重写将密码写入通道输入中。
您仍然需要
requiretty关闭该选项,因为SFTP无法与TTY一起使用。
有关使用其他/ root帐户自动执行操作时的一般注意事项,请参阅:
在Linux上使用SSH以root身份自动执行命令



