gpt4 book ai didi

python - 在 Python 中使用 Paramiko 模块切换到 root 用户时获取 "must be run from a terminal"

转载 作者:行者123 更新时间:2023-11-28 18:14:34 26 4
gpt4 key购买 nike

我正在尝试通过 Python 脚本自动执行任务。这个想法是以普通用户身份登录,然后发送 su 命令并切换到 root 帐户。

我不能以 root 身份直接登录的原因是 SSHD 不允许 root 登录。

这是我所拥有的:

ip='192.168.105.8'
port=22
username='xyz'
password='abc'
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port,username,password)
print ("SSH connection established")

stdin,stdout,stderr=ssh.exec_command('sudo fast.sh')
outlines=stdout.readlines()
outlines+=stderr.readlines()
resp=''.join(outlines)
print(resp)

现在,我想发送 su 命令并回显 root 密码。我知道这不是好的做法,但我需要一种快速简便的方法来测试它,所以我同意这一点。

但是,当我这样做时stdin,stdout,stderr=ssh.exec_command('su') 并提供密码,我得到一个错误

su: must be run from a terminal

谁能帮我解决这个问题。

我在 Windows 笔记本电脑上运行 Python 脚本以通过 ssh 连接到 Linux 设备,然后使用 su 命令切换到 root 用户并回显密码,以便我可以以 root 身份运行其他命令。

谢谢。

最佳答案

首先,如您所知,自动化 susudo 不是正确的解决方案。

正确的解决方案是设置一个专用的私钥,只有您的任务所需的权限。另见 Allowing automatic command execution as root on Linux using SSH .


无论如何,您的命令会失败,因为 sudosudoers configuration file 中配置为需要带有 requiretty 选项的交互式终端| (作为阻止其自动化的一种方式)。

默认情况下,Paramiko(正确地)不会为 exec channel 分配伪终端。

要么删除 requiretty 选项。

如果你不能删除它,你可以使用exec_command methodget_pty参数强制Paramiko分配伪终端。 :

ssh.exec_command('sudo fast.sh', get_pty=True)

但这不是一个好的选择,因为它会给您带来很多讨厌的副作用。伪终端旨在用于交互式使用,而不是用于自动执行命令。有关一些示例,请参见

关于python - 在 Python 中使用 Paramiko 模块切换到 root 用户时获取 "must be run from a terminal",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49213205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com