在 Paramiko 中以 sudo 的形式发送命令

问题描述 投票:0回答:3

如何以 sudo 用户身份通过 Paramiko 在 Linux 机器中运行命令并发送 sudo 密码 alomg,然后获取输出? 我尝试了以下代码,但由于它没有返回输出(我尝试测试 ls -l /root),我不确定它是否有效。

stdin, stdout, stderr =         ssh.exec_command("sudo ls -l")
stdin.write('sudo_password\n')
stdin.flush()
Output = stdout.read.splitlines()

第二个问题是,我的理解是,我们不能在第一个命令中使用“sudo -s”,然后以 root 身份运行接下来的命令,而我们首先使用非 root 命令来启动会话,对吧? (想象一下盒子上没有root密码)

以 sudo 形式发送命令、然后提供密码并获取输出的功能代码是什么?

什么是对多个命令执行相同操作的功能代码?我们可以发送一次密码,然后将其用于其余命令吗?

command sudo paramiko
3个回答
0
投票
目标系统上的

sudo
配置为需要终端仿真来提示密码。

它建议您使用

-S
开关来允许从标准输入输入密码(您的代码正在尝试执行的操作)。所以就这么做吧。


0
投票

我尝试过“回显密码”方法,但它对我不起作用,所以我更深入地挖掘,发现

exec_command
有一个参数
get_pty
,它请求伪终端

stdin, stdout, stderr = client.exec_command(cmd, get_pty=True)
stdin.write(sudo_password + "\n")
stdin.flush()

来自文档字符串:

:param bool get_pty:
            Request a pseudo-terminal from the server (default ``False``).
            See `.Channel.get_pty`

-1
投票

感谢大家花时间发布他们的答案。 这个问题有一个简单的答案,就是:

command = 'echo "sudo-password" | sudo <the-command-to-run-as-sudo>'
stdin, stdout, stderr = SESSION.exec_command(command)
stdout = stdout.read().decode()

示例命令:

command = 'echo "123456" | sudo ls-l /root'
stdin, stdout, stderr = SESSION.exec_command(command)
stdout = stdout.read().decode()
© www.soinside.com 2019 - 2024. All rights reserved.