【问题标题】:Doing SFTP operations over sudo in remote machine with Paramiko使用 Paramiko 在远程机器中通过 sudo 执行 SFTP 操作
【发布时间】:2020-05-26 10:13:52
【问题描述】:

如何使用 Paramiko 和 sudo 运行 chmod 775

代码sn-p:

    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())    
    r_pass = getpass.getpass(prompt='Remote password? ')   
    ssh_client.connect(r_ip, username=r_name, password=r_pass)
    ftp = ssh_client.open_sftp()
    for fn in files:
        print("sending {} of {}".format(count, len(files)))
        ftp.put(fn, posixpath.join(r_path_mark, fn))
        ftp.chmod(r_path_mark+fn, 0o775)   

最后一个ftp.chmod 命令导致“permission denied”。

【问题讨论】:

  • 这能回答你的问题吗? Running Sudo Command with paramiko
  • 我的猜测是 sudo 通过标准输入要求输入密码。如果您连接的用户允许无密码 sudo,我认为它会起作用。否则,我对 Paramiko 不够熟悉,不知道它是否会让您在 stdin 上将密码发送到 sudo 提示输入密码之后。
  • 我建议改用 Ansible

标签: python ssh sftp sudo paramiko


【解决方案1】:

没有通过sudo 运行 SFTP 的标准方法——虽然并非不可能,但它涉及到大量的黑客攻击。

对于一些背景知识,我关于将su/sudo 与 WinSCP SFTP 客户端一起使用的文章:
How do I change user after login (e.g. su root)?


或者,您可以在sudo 上运行chmod shell 命令,其他问题已经涵盖了:


虽然一般来说,您不应该以这种方式使用sudo 来实现命令自动化。
如需替代方案,请参阅:
Allowing automatic command execution as root on Linux using SSH

【讨论】:

    【解决方案2】:

    感谢所有回复的人。我确实审查了每个人的反馈。一切都很好,但对于我们的解决方案,它没有这样做。还要感谢@cricket_007。我的 TL 建议我也使用 Ansible。

    我确实做到了。诀窍是调用另一个脚本,其中被调用的脚本驻留在远程机器本地,因此 sudo 的东西不是问题。

    流程如下:

    • 应用服务器(用户调用脚本“A”)
    • 应用服务器(脚本 A 执行其例程,然后使用 subprocess.call 它调用同样驻留在同一应用服务器中的脚本“B”)
    • 应用服务器(脚本'B'有一些神奇的开源代码,我没有编写......但它调用驻留在远程服务器中的脚本'C')
    • 远程服务器(脚本 'C' 能够以 sudo su 的形式在本地运行所有内容。作为本地机器不需要特殊编码

    一切顺利

    【讨论】:

      【解决方案3】:

      直接在你的 for 循环中执行命令 -

      stdin, stdout, stderr = ssh.exec_command("sudo su - -c 'chomd 775 $filename'")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        • 1970-01-01
        相关资源
        最近更新 更多