我正在尝试通过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:必须从终端
运行
有人可以帮我解决这个问题。
我在我的Windows笔记本电脑上运行Python脚本ssh到Linux设备然后使用root
命令切换到su
用户并回显密码,以便我可以以root身份运行其他命令
感谢。
答案 0 :(得分:1)
首先,如您所知,自动su
或sudo
不是正确的解决方案。
正确的解决方案是设置专用私钥,仅具有您的任务所需的权限。
无论如何,您的命令失败,因为sudo
被配置为需要sudoers
configuration file中具有requiretty
选项的交互式终端(以阻止其自动化)。
Paramiko(正确)默认情况下不为exec
频道分配伪终端。
删除requiretty
选项。
如果您无法将其删除,可以强制Paramiko使用exec_command
method的get_pty
参数分配伪终端:
ssh.exec_command('sudo fast.sh', get_pty=True)
但这不是一个好选择,因为它可以带给你很多令人讨厌的副作用。伪终端旨在用于交互式使用,而不是用于自动执行命令。有关示例,请参阅