Paramiko exec_command () не выполняет команду на удаленном linux сервере - PullRequest
1 голос
/ 06 января 2020

Я работаю над сценарием Python 3.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 s sh и используется аналогичный 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/ и использовал аналогичный 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

I'm используя порт 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.

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

...