当您从root以外的任何用户进行SSH时,Paramiko exec_command挂起

时间:2019-05-10 07:39:03

标签: linux python-3.x ssh permissions paramiko

因此,我编写了一个小的python代码,该代码在使用exec_command用户时挂在support步骤上,并且在使用root用户时也可以正常工作

以支持用户身份登录时,从终端运行脚本没有问题。这就是我无法理解paramiko.exec_command为何挂起的原因。

我尝试从运行python的Windows 10运行脚本 Python 3.6.6 | Anaconda自定义(64位)| (默认,2018年6月28日,11:27:44)在Win32上运行[MSC v.1900 64位(AMD64)]以及运行Python 3.7.3的ubuntu 19.04(默认,2019年3月27日,22:11:17) [GCC 7.3.0] :: Linux上的Anaconda,Inc。

我尝试使用ssh的机器正在运行CentOS版本6.9(最终版) 这是这台机器上的ls -ltr

-rwxr-xr-x. 1 support support 10430264 May 10 12:13 port_check

我尝试从要通过SSH执行的命令中添加和删除sudo,还注释了ssh.invoke_shell()

import sys
import paramiko


def pew_print(some_input):
    try:
        some_input = some_input.decode("utf-8")
    except Exception as errors:
        print("Errors : {0}".format(errors))
        pass
    some_input = str(some_input)
    sys.stdout.write(some_input)
    sys.stdout.write("\n")
    sys.stdout.flush()


def ssh_command_output(ssh, command_string):

    # ssh.invoke_shell()
    stdin, stdout, stderr = ssh.exec_command(command_string, timeout=90)
    pew_print(stdout.read())


def something(ip_address):

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=ip_address, port=22, username="support", password="pass")
    # ssh_command_output(ssh, "sudo chmod 755 /home/support/port_check")
    # ssh_command_output(ssh, "sudo /home/support/port_check")
    ssh_command_output(ssh, "ls -ltr")

使用support用户时,我期望使用root用户时结果是相同的

编辑:

sudo不需要支持用户密码,我已经尝试过仅从支持用户处执行ls -ltr,并且该请求也将挂起。

我通常可以ssh support@host然后执行以上所有命令

1 个答案:

答案 0 :(得分:0)

因此,在深入探讨问题之后。我发现不允许远程执行,因此关闭了这个问题。