Открытие сессии SSH в Python только со стандартными библиотеками - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь исправить сегмент кода, изначально разработанный в Python 2.X.Я должен использовать все стандартные библиотеки, удалить paramiko и сохранять функциональность одинаковой.Как видите, есть конфигурация номера порта, имя пользователя, пароль и т. Д. Есть предложения?

Я пробовал другие варианты SSH, но ни один не помог.Возвращает ошибку.

def grab_and_post_inventory_data(machine_name):
try:
    if not USEKEYFILE?: ssh.connect(str(machine_name), port=PORT, username=USER, password=PASSWORD, timeout=TIMEOUT)
    else: ssh.connect(str(machine_name), port=PORT, username=USER, key_filename=KEY_FILE, timeout=TIMEOUT)
except paramiko.AuthenticationException:
    print(machine_name + ': authentication failed')
    return None
except Exception as err:
    print(machine_name + ":" + err)
    return  None
devargs = {}

Вывод является ошибкой, говоря, что ssh не определен.Нет библиотеки ssh.Я пробовал другие решения, но безрезультатно.Есть идеи?Опять же, мне нужно использовать только стандартную библиотеку и удалить paramiko.

1 Ответ

0 голосов
/ 22 января 2019

subprocess.Popen () Он предназначен для управления локальным ssh-сеансом с помощью subprocess.Popen (), если нет доступных библиотек.Это супер примитивный способ сделать что-то, и не рекомендуется, если вы можете его избежать.

import subprocess
import sys

HOST="www.example.org"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="uname -a"

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
    error = ssh.stderr.readlines()
    print >>sys.stderr, "ERROR: %s" % error
else:
    print result

, но рекомендуемый способ - использовать paramiko для ssh-клиента и сервера.он будет обрабатывать все операции низкого уровня.он очень прост в использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...