Я работаю над скриптом 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.
Интересно, разрешил ли сервер соединение, но не разрешил выполнить команду, как это проверить.
ls
выполниться правильно, но рабочий каталог был пуст? Пробовали ли вы использовать другую команду, напримерwhoami
илиcwd
? - person steviestickman   schedule 06.01.2020