如何以 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 形式发送命令、然后提供密码并获取输出的功能代码是什么?
什么是对多个命令执行相同操作的功能代码?我们可以发送一次密码,然后将其用于其余命令吗?
我尝试过“回显密码”方法,但它对我不起作用,所以我更深入地挖掘,发现
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`
感谢大家花时间发布他们的答案。 这个问题有一个简单的答案,就是:
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()