python - 如何使用 sudo 启动 Python Paramiko SFTP?

标签 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: Channel closed.
DEBUG:paramiko.transport:EOF in transport thread

关于如何让 Paramiko 使用 sudo 访问打开 SFTP 的任何提示?

最佳答案

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

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


invoke_subsystemexec_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/

相关文章:

linux - 具有用户特权/权利的 fork

debian - VirtualBox 中 Debian 的主要/默认用户不是 sudo 用户

python - 从 Google Cloud Storage Bucket 提供静态文件(适用于 GCE 上托管的 Django 应用程序)

python - pyparsing:解析其中包含特殊单词的句子

python - "tuple index out of range"

java - 切换用户后如何使用 JSch 库获取 SFTP 服务器上目录中的所有文件列表?

java - jsch的ChannelSftp中exit和quit有什么区别?

php - 无效大小错误 - Phpseclib - SFTP 连接

linux - 在命令链中输入 sudo 命令的密码

python - 属性错误 : VerifiedHTTPSConnection instance has no attribute '_tunnel_host'