使用标准的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: Channel closed.
DEBUG:paramiko.transport:EOF in transport thread
关于如何让 Paramiko 使用 sudo 访问打开 SFTP 的任何提示?
最佳答案
首先,自动化 su
或 sudo
不是正确的解决方案。
正确的解决方案是设置一个专用的私钥,只有您的任务所需的权限。
invoke_subsystem
和exec_command
通常是互斥的。您可以使用其中之一,但不能同时使用两者。 “子系统”是“命令”的别名。 IE。 "sftp"
子系统通常是 "/bin/sftp-server"
命令的别名(认为这是一个非常简化的解释)。
不支持以不同用户身份执行 SFTP 子系统。
所以你所能做的就是以不同的用户身份直接执行 sftp_server
二进制文件。
chan.exec_command('sudo su -c /bin/sftp-server')
(假设 *nix OpenSSH 服务器)
而且您绝对不能请求 PTY (get_pty
),因为它与 SFTP 协议(protocol)不兼容。
关于python - 如何使用 sudo 启动 Python Paramiko SFTP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35190595/