Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获得;必须从终端运行;在Python中使用Paramiko模块切换到root用户时_Python_Ssh_Sudo_Paramiko_Su - Fatal编程技术网

获得;必须从终端运行;在Python中使用Paramiko模块切换到root用户时

获得;必须从终端运行;在Python中使用Paramiko模块切换到root用户时,python,ssh,sudo,paramiko,su,Python,Ssh,Sudo,Paramiko,Su,我正试图通过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.conne

我正试图通过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
命令并回显根密码。我知道这不是一个好的做法,但我需要一个快速和简单的方法来测试这一点,所以我同意

然而,当我这样做的时候
stdin,stdout,stderr=ssh.exec_命令('su')
并提供密码,我得到一个错误

苏:必须从终点站运行

有人能帮我解决这个问题吗

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


谢谢。

首先,您知道,自动化
su
sudo
不是正确的解决方案

正确的解决方案是只使用任务所需的权限设置专用私钥。另见


无论如何,您的命令都会失败,因为
sudo
配置为需要一个带有
requirety
选项的交互式终端(作为阻止其自动化的一种方式)

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

或者删除
requirety
选项

如果无法删除,可以使用以下参数的
get_pty
强制Paramiko分配伪终端:

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

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