你如何用sudo启动Python Paramiko SFTP?

时间:2016-02-04 00:49:00

标签: python sftp sudo paramiko su

使用标准client.open_sftp()句柄为我提供SFTP控件但没有sudo / root权限,任何类型的/etc/**文件都无法编辑。我有一个没有无密码sudo访问权限的用户,我想我可以从sudo su开始,然后调用SFTP,但似乎并非如此。

t = paramiko.Transport(('192.168.56.102', 22))  
t.connect(username='vagrant', password='vagrant')
chan = t.open_session()
chan.get_pty()
chan.invoke_subsystem('sftp')
chan.exec_command('sudo su')
sftp = paramiko.SFTPClient.from_transport(t)

..错误

  

paramiko.ssh_exception.SSHException:频道已关闭   DEBUG:paramiko.transport:传输线程中的EOF

有关如何让Paramiko通过sudo访问打开SFTP的任何提示吗?

1 个答案:

答案 0 :(得分:0)

首先,自动susudo不是正确的解决方案。

正确的解决方案是设置专用私钥,仅具有您的任务所需的权限。

invoke_subsystemexec_command通常是互斥的。您可以使用其中一个,但不能同时使用两个。 A"子系统"是一个"命令的别名"。即"sftp"子系统通常是"/bin/sftp-server"命令的别名(认为这是一个非常简单的解释)。

没有本机支持将SFTP子系统作为不同的用户执行。

所以你所能做的就是直接以不同的用户身份执行sftp_server二进制文件。

chan.exec_command('sudo su -c /bin/sftp-server')

(假设* nix OpenSSH服务器)

你绝对不能要求PTY(get_pty)因为它与SFTP协议不兼容。