Paramiko [Errno None] Невозможно подключиться к порту 22 172.16.127 с использованием Pycharm и tkinter - PullRequest
0 голосов
/ 11 марта 2020

Я использую tkinter для создания настольного приложения. Кроме того, используя Paramiko для соединения s sh. В приложении есть кнопка «Соединить», вызывающая функцию

def checkAuth():
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, 22, username=userName, password=password)

Вот вызов функции в приложении tkinter.

"Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\****\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:/Users/****/PycharmProjects/tracer/tracer.py", line 18, in checkAuth
ssh.connect(host, 22, username=userName, password=password)
File "C:\Users\****\PycharmProjects\tracer\venv\lib\site-packages\paramiko\client.py", line 368, in connect
raise NoValidConnectionsError(errors)
paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Unable to connect to port 22 on 172.16.127.6 or fe80::d99d:ff15:3fc1:482e

connectButton = Button(connect, text="Connect", width=6, command=checkAuth)

Но получение «paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Невозможно подключиться к порту 22 на 172.16.127.6 «в качестве выхода».

Я могу запустить только эту функцию в качестве сценария stand-by, и он прекрасно подключается. Я могу s sh через cmd и замазка на хост без проблем. Кажется, это происходит только при использовании функции в приложении tkinter.

Вся помощь очень ценится.

1 Ответ

0 голосов
/ 11 марта 2020

Это пример того, как я sh подключаюсь к удаленной машине:

import tkinter as tk
import os
import paramiko

def setup_ssh_client(host):
    print("establishing ssh connection....")
    client = paramiko.client.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    home = os.path.expanduser("~")
    ret = os.path.exists(os.path.join(home, "somekey.pem"))
    if not ret:
        print("Unable to locate pem key, upload aborted....")
        return None

    private_key = paramiko.RSAKey.from_private_key_file(os.path.join(home, "somekey.pem"))
    try:
        client.connect(hostname=host, username="bob", pkey=private_key)
    except Exception as e:
        print(e)
    print("connected")
    stdin, stdout, stderr = client.exec_command('ls')
    for line in stdout:
        print('... ' + line.strip('\n'))
    return client

window = tk.Tk()
connectButton = tk.Button(window, text="Connect", width=6, command=setup_ssh_client)
connectButton.pack()
window.mainloop()

Я попытался сделать это с помощью tkinter, и при нажатии на кнопку он подключился нормально. Я не вижу ничего отличного от того, что вы делаете, возможно, добавьте client.load_system_host_keys () и посмотрите, поможет ли это. Просто используйте ваше имя пользователя и пароль вместо закрытого ключа для аутентификации вместо того, что я делаю в моем примере.

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