Python paramiko 执行 sudo

标签 python linux paramiko

我正在使用 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()

有没有办法使用 paramkio 执行 sudo su - user 命令,以便可以从远程读取传输的文件?

谢谢!

最佳答案

不,你不能这样做......但是你可以通过在上传后使用 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()

sudu 上的 -S 标志告诉它期望密码来自标准输入

-p '' 标志告诉 sudo 使用 '' 或空字符串作为密码提示

不能在调用open_ssh之前在exec_command中简单地使用sudo su - username,因为每个对 exec_command 的调用在其自己的子 shell 中运行,因此更改不会传播回主 session

关于Python paramiko 执行 sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46285449/

相关文章:

regex - 如何用sed删除()

Linux线程 sleep 与读取

python - 使用 Paramiko 从远程服务器执行命令到另一个远程服务器

python - 如何将 Python 项目链接到 WSGI 文件?

python - 如何使包含文件路径的Python脚本独立可执行且可导入?

c# - Linux : missing all bower packages 上的 asp dotnet 核心

Python paramiko : redirecting stderr is affected by get_pty = True

Python ctypes : How do I flush output from stderr?

python - 在 mysql/django 中将图像保存在后端数据库中是一种好习惯吗?

python - 使用 paramiko.Transport 打开 SSH session 时出现 "Connection refused"