【发布时间】:2021-08-12 11:33:09
【问题描述】:
我正在尝试使用 paramiko 实现 SSH 服务器,但我不断收到 EOFError,我不知道为什么
class Ctx(paramiko.ServerInterface):
def check_auth_password(self, username, password):
if password == "1999":
return paramiko.AUTH_SUCCESSFUL
else:
print("[+] Wrong Password...")
return paramiko.AUTH_FAILED
def create_socket():
sock = socket.socket()
return sock
ctx = Ctx()
sock = Ctx.create_socket()
sock.bind(("127.0.0.1", 5555))
server = paramiko.Transport(sock)
server.start_server(server=ctx)
错误是由start_server 引起的,我不明白为什么。回溯是
Traceback (most recent call last):
File "test.py", line 26, in <module>
server.start_server(server=ctx)
File "/home/khaled/Documents/materials/python/env/lib/python3.8/site-packages/paramiko/transport.py", line 728, in start_server
raise e
File "/home/khaled/Documents/materials/python/env/lib/python3.8/site-packages/paramiko/transport.py", line 2034, in run
self.packetizer.write_all(b(self.local_version + "\r\n"))
File "/home/khaled/Documents/materials/python/env/lib/python3.8/site-packages/paramiko/packet.py", line 367, in write_all
raise EOFError()
EOFError
文档没有显示 start_server 返回 EOFError 而是返回 SSHException 与 ServerInterface 相同的类文档没有提及此错误类型,仅提及它在 socket() 中,这对我来说似乎很好,它绑定到一个没有错误的端口。 Paramiko 版本是 2.7.2 安装在 python 虚拟环境中。
【问题讨论】:
-
@CharlesDuffy 刚刚使用版本信息编辑了问题。见最后一行。并且没有远程端,一切都在同一台机器上测试,我没有尝试连接。仅通过运行程序就会发生此错误。
-
write_all()如果您只是启动侦听套接字,则没有任何意义。 -
@CharlesDuffy 这很奇怪我确定我没有建立任何联系怎么会发生这种情况。这是 paramiko 错误吗
-
首先,在建立任何连接之前创建传输是错误的。我非常怀疑这是一个 paramiko 错误;看起来像是滥用 API。
-
(“传输”是 SSH 客户端和 SSH 服务器之间的 TCP 连接;在客户端连接到您之前,作为服务器,您不能建立一个 TCP 连接)
标签: python python-3.x networking ssh paramiko