使用标准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的任何提示吗?
答案 0 :(得分:0)
首先,自动su
或sudo
不是正确的解决方案。
正确的解决方案是设置专用私钥,仅具有您的任务所需的权限。
invoke_subsystem
和exec_command
通常是互斥的。您可以使用其中一个,但不能同时使用两个。 A"子系统"是一个"命令的别名"。即"sftp"
子系统通常是"/bin/sftp-server"
命令的别名(认为这是一个非常简单的解释)。
没有本机支持将SFTP子系统作为不同的用户执行。
所以你所能做的就是直接以不同的用户身份执行sftp_server
二进制文件。
chan.exec_command('sudo su -c /bin/sftp-server')
(假设* nix OpenSSH服务器)
你绝对不能要求PTY(get_pty
)因为它与SFTP协议不兼容。