Python Paramiko exec_command()未在远程linux服务器上执行命令

Python Paramiko exec_command()未在远程linux服务器上执行命令,python,paramiko,ssh2,Python,Paramiko,Ssh2,我正在编写Python3.7脚本,以便在远程Linux服务器上连接和执行命令 我使用了paramiko和ssh2.session库,脚本能够连接到远程服务器,但命令没有执行 远程服务器详细信息 cat /etc/issue **Welcome to SUSE Linux Enterprise Server 12 SP2 (x86_64) - Kernel \r (\l).** Windows python版本 C:\Users\Desktop>python --version **

我正在编写Python3.7脚本,以便在远程Linux服务器上连接和执行命令

我使用了paramiko和ssh2.session库,脚本能够连接到远程服务器,但命令没有执行

远程服务器详细信息

cat /etc/issue

**Welcome to SUSE Linux Enterprise Server 12 SP2  (x86_64) - Kernel \r (\l).**
Windows python版本

C:\Users\Desktop>python --version

**Python 3.7.4**
我已经浏览了链接并使用了类似的python脚本

请使用paramiko库检查以下代码

import paramiko

hostname='x.x.x.x' #ip not mentioned for privacy reasons
port=4422
username='ts_r'
password='a'


ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("ls -lrt")
print(stdout.readlines())
print(stderr.readlines())
ssh.close()


script output:
--------------
C:\Users\Desktop>python test.py
[]
[]
使用ssh2.session

我已经浏览了链接并使用了类似的python脚本

请使用ssh2.session库检查以下代码

from __future__ import print_function

import socket

from ssh2.session import Session

host = 'x.x.x.x' #ip not mentioned for privacy reasons
user = 'ts_r'
port = 4422
password = 'a'
cmd="ls -lrt"
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

session = Session()
session.handshake(sock)
session.userauth_password(user, password)

channel = session.open_session()
channel.execute(cmd)
size, data = channel.read()
while size > 0:
    print(data)
    size, data = channel.read()
channel.close()
print("Exit status: %s" % channel.get_exit_status())


script output:
--------------
C:\Users\Desktop>python test3.py
Exit status: 1
我使用的是端口4422,而不是端口22,因为它用于远程linux服务器上的其他应用程序

有人能解释一下不在远程服务器上执行该命令的原因以及如何解决该问题吗

这里的问题是脚本既没有给出已执行命令的输出,也没有抛出错误

我尝试过不同的命令,比如“pwd”、“uname-a”,但都没有执行

我在paramiko文档中找到了以下关于exec_命令的描述

exec_command(*args, **kwds)

Execute a command on the server. If the server allows it, the channel will then be directly connected to the stdin, stdout, and stderr of the command being executed.

我想知道服务器是否允许连接,但不允许执行命令如何检查。

输出是什么?
ls
是否可以正确执行,但工作目录为空?您是否尝试过另一个命令,如
whoami
cwd
?目录不是空的,我尝试过各种命令,包括(whoami,cwd)它们都没有执行,我还在远程服务器上安装了一些应用程序命令,当它们执行时,相应的日志文件将被更新。我使用这些命令运行了脚本,但日志文件中没有更新任何内容。您是否尝试手动通过ssh连接到端口4422?是的,我已从另一台linux服务器手动连接并执行了这些命令。我已连接到远程linux服务器,并通过windows putty通过保持连接类型为ssh来执行命令。它的输出是什么?
ls
是否可以正确执行,但工作目录为空?您是否尝试过另一个命令,如
whoami
cwd
?目录不是空的,我尝试过各种命令,包括(whoami,cwd)它们都没有执行,我还在远程服务器上安装了一些应用程序命令,当它们执行时,相应的日志文件将被更新。我使用这些命令运行了脚本,但日志文件中没有更新任何内容。您是否尝试手动通过ssh连接到端口4422?是的,我已从另一台linux服务器手动连接并执行了这些命令。我已连接到远程linux服务器,并通过windows putty通过保持连接类型为ssh来执行命令。它起作用了