代码之家  ›  专栏  ›  技术社区  ›  Young

Python paramiko执行sudo

  •  4
  • Young  · 技术社区  · 7 年前

    我在用paramiko put 方法将文件从本地服务器发送到远程服务器。 sudo su - user 从远程查看文件的命令。我还尝试从本地更改权限,但文件权限在传输时保持不变。

    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    ssh.connect(<Host>, username=<User Name>, password=<Password)
    
    sftp = ssh.open_sftp()
    sftp.put(<Source>, <Destination>)
    sftp.close()
    

    sudo su-用户 命令,以便可以从远程读取传输的文件?

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  7
  •   Joran Beasley    7 年前

    不,你不能这样做。。。然而,你可以通过使用sudo在上传后移动文件来解决这个问题

    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    ssh.connect(<Host>, username=<User Name>, password=<Password)
    
    sftp = ssh.open_sftp()
    sftp.put(<Source>, destination_i_CAN_write_to)
    sftp.close()
    
    #now move the file to the sudo required area!
    stdin, stdout, stderr = ssh.exec_command("sudo -S -p '' mv /uploaded/path/to/file.txt /restricted/sudo/path/file.txt",**kwargs)
    stdin.write(SUDO_PASSWORD + "\n")
    stdin.flush()
    

    这个 -S 标志打开 sudu

    这个 -p '' flag告诉sudo使用 '' 或空字符串作为密码提示

    不能 简单使用 sudo su - username exec_command 在呼叫之前 open_ssh ,因为每次调用 exec_命令