Я работаю над сценарием 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.
Интересно, разрешил ли сервер соединение, но не позволил выполнить команду, как это проверить.