Paramiko [Errno None] 无法使用 Pycharm 和 tkinter 连接到 172.16.127 上的端口 22

问题描述 投票:0回答:1

我正在使用 tkinter 构建桌面应用程序。另外,使用 Paramiko 进行 ssh 连接。该应用程序有一个调用该功能的“连接”按钮

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] Unable to connect to port 22 on 172.16.127.6”作为输出。”

我可以将此函数作为独立脚本运行,并且连接良好。我可以通过 cmd 和 putty ssh 到主机,没有问题。似乎只有在使用 tkinter 应用程序中的功能时我才会遇到这个问题。

非常感谢所有帮助。

python tkinter ssh pycharm paramiko
1个回答
0
投票

这是我如何通过 ssh 连接到远程计算机的示例:

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() 并看看它是否有帮助。只需使用您的用户名和密码而不是私钥进行身份验证,而不是我在示例中所做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.