python - Paramiko SSH start_server 函数引发 EOF 错误?
问题描述
我正在尝试使用 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 虚拟环境中。
解决方案
您不能围绕绑定套接字本身创建传输。
接受来自客户端的连接,并围绕该连接创建传输。
引用https://github.com/paramiko/paramiko/blob/master/demos/demo_server.py,为简单起见删除了异常处理并添加了一些解释性注释 -
# first, we create our listening socket
# but we don't actually wrap it in a transport yet!
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("", 2200))
# next, tell the socket to start listening
# here, we're allowing up to a 100-connection backlog; tune to taste
sock.listen(100)
# here, we're blocking until a client actually connects
print("Listening for connection ...")
client, addr = sock.accept()
# only now, after we have a client, can we create a transport
print("Got a connection!")
t = paramiko.Transport(client, gss_kex=DoGSSAPIKeyExchange)
推荐阅读
- python - 在 python 2.7 中使用 Super(Subclass, self) 的多重继承
- javascript - 使用模块时如何调用 body.onload?
- python - 在 Flask (Python) 中为不同的 html 选项创建 if 语句
- javascript - 反应错误 - Uncaught SyntaxError: Unexpected token o in JSON at position 1
- ios - 更新 Binding 时未发生 SwiftUI 动画
- android - 从 strings.xml 获取 JSON URL 链接到 HTTP 请求
- azure-container-service - AKS api 服务授权的 ip 范围是否自动包含 azure devops?
- java - 带有 Spring Security 的 Java SpringBoot Websocket
- laravel - 重定向中间件路由在 Laravel 中不起作用
- java - 检索 Gmail 收件箱中存在的相关邮件的算法