Paramiko exec_command() не выполняет команду на удаленном сервере Linux

Я работаю над скриптом Python 3.7 для подключения и выполнения команд на удаленном сервере Linux.

Я использовал библиотеки paramiko и ssh2.session, скрипт смог подключиться к удаленному серверу, но команда не выполняется.

Сведения об удаленном сервере

cat /etc/issue

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

версия питона для винды

C:\Users\Desktop>python --version

**Python 3.7.4**

Я прошел по ссылке python paramiko ssh и использовал аналогичный скрипт 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

Я перешел по ссылке https://pypi.org/project/ssh2-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», ни одна из них не выполняется.

Я нашел приведенное ниже описание exec_command из документа paramiko.

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.

Интересно, разрешил ли сервер соединение, но не разрешил выполнить команду, как это проверить.


person rohit    schedule 06.01.2020    source источник
comment
Каков результат? Мог ли ls выполниться правильно, но рабочий каталог был пуст? Пробовали ли вы использовать другую команду, например whoami или cwd?   -  person steviestickman    schedule 06.01.2020
comment
Каталог не пуст, я пробовал различные команды, включая (whoami, cwd), ни одна из них не выполняется, у меня также есть некоторые прикладные команды, установленные на нашем удаленном сервере, когда они выполняются, соответствующий файл журнала будет обновлен. Я запустил скрипт с этими командами, и в файле журнала ничего не обновляется.   -  person rohit    schedule 06.01.2020
comment
Вы пытались вручную подключиться по ssh к порту 4422?   -  person steviestickman    schedule 06.01.2020
comment
Да, я вручную подключился с другого Linux-сервера и выполнил команды. Это работает.   -  person rohit    schedule 06.01.2020
comment
Я подключился к удаленному серверу Linux и выполнил команды через замазку Windows, сохранив тип подключения как ssh. Оно работает   -  person rohit    schedule 06.01.2020