【问题标题】:How do you start Python Paramiko SFTP with sudo?如何使用 sudo 启动 Python Paramiko SFTP?
【发布时间】:2018-04-26 13:57:42
【问题描述】:

使用标准的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?

【问题讨论】:

    标签: python sftp sudo paramiko su


    【解决方案1】:

    首先,自动化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 协议不兼容。

    【讨论】:

    • 我试过了,但没有用。如果你的 OpenSSH sshd_config 有“Subsystem sftp ”,那么运行这个操作对底层用户没有任何影响。
    • 我的回答与Subsystem 指令无关。它实际上绕过了它。所以我不明白你的评论。
    • 我尝试了您提出的解决方案,但不断收到权限被拒绝错误。当我在我的机器上执行 grep -e "sftp" 时,我看到 sftp_server 没有运行。据我了解,当建立 sftp 连接时,OpenSSH 会启动 sftp_server 进程。在这种情况下,您在此处提出的解决方案不起作用。
    • “我的机器”是什么意思?客户端的服务器?什么“权限被拒绝错误”“这种情况”是什么意思?我认为您应该提出一个新问题,因为您可以在 cmets 中提供的信息很少,很难解决这个问题。
    • 我的问题与这个问题非常相似,但我添加了额外的内容:*.com/questions/50035927/…