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

vfh0ocws  于 2022-11-08  发布在  PyCharm
关注(0)|答案(1)|浏览(186)

我正在使用tkinter构建一个桌面应用程序。同时,使用Paramiko进行ssh连接。该应用程序有一个“connect”按钮,用于调用函数

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]无法连接到www.example.com上的端口22172.16.127.6“作为输出。”
我可以运行这个函数作为一个独立的脚本,它连接良好。我可以ssh通过cmd和putty到主机没有问题。它似乎只有当使用tkinter应用程序中的函数,我遇到这个问题。
非常感谢你们的帮助。

hwamh0ep

hwamh0ep1#

这是一个我如何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(),看看是否有帮助。只需使用你的用户名和密码而不是私钥来验证,而不是像我在例子中所做的那样。

相关问题