问题标签 [twisted.conch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用 twisted.conch 作为客户端通过 ssh 接收扩展数据
我目前正在通过蛮力学习 ssh/只是继续破解,直到我理解它的方法。经过反复试验,我已经能够成功发送“pty-req”,然后是“shell”请求,我可以获得登录前导码,发送命令并接收标准输出,但我不确定如何告诉SSH 服务 我想接收标准错误和状态消息。目前,通读其他 SSH 实现(paramiko、Net::SSH)并没有太多指导意义。
也就是说,查看 SSH 的 RFC 之一,我相信列出的请求之一可能是我正在寻找的:https ://www.rfc-editor.org/rfc/rfc4250#section-4.9.3
此外,我尝试向远程 shell 添加显式错误命令:
看起来 stderr 正在混入 stderr
python - 使用 twisted.conch 跟踪 ssh 登录尝试的 IP
我正在尝试使用简单的 ssh 服务器捕获 ssh 暴力破解尝试,代码如下并且可以正常工作,但是我无法将用户名/密码组合与其原始 IP 地址匹配。
到目前为止,这很简单,它没有记录,只是打印到标准输出。我使用 buildProtocol 定义在建立新连接时打印出新连接的 IP 地址。但是,我想获取 IP 地址以及用户名和密码凭据,以便我可以同时跟踪来自不同客户端的多个 ssh 暴力破解尝试。就目前而言,我只能在建立连接时获取 IP 地址,这使得同时跟踪多个连接变得不可能。
只是为了澄清一下,当我提到一个或多个连接时,我并不是指成功登录,这在我的代码中是不可能的,也不是有意的。我指的是与 ssh 服务器的单个连接,它允许在重新连接之前尝试 3 次密码。
示例输出:
python - 关闭 Twisted conch SSH 连接的正确方法是什么?
关闭 Twisted conch SSH 连接的正确方法是什么?有没有明确的方法来做到这一点?
我见过的所有 Twisted conch 示例都会关闭 SSH 通道然后停止反应器。反应堆关闭似乎可以处理关闭连接。但是,我将 wxreactor 与 wxPython 一起使用,我不想停止反应器,但我想在完成后关闭 ssh 连接。
在查看 tcsconnection 之后,似乎 serviceStopped() 方法是要走的路。它关闭所有打开的通道并在完成后运行 _cleanupGlobalDeferreds() ,但随后我开始收到如下异常:
通道关闭后,我似乎仍在从服务器获取数据。#twisted 中的某个人似乎认为我不应该自己调用 serviceStopped(),因为它应该由 Twisted 的不同部分自动调用。
我在 Twisted 源代码中进行了一些探索,发现 serviceStopped 应该由 tcstSSHClientTransport.connectionLost() 调用。
我正在跟踪我的 SFTP 客户端对象并通过它们的传输属性访问 SSH 连接。这是一个可以在本地运行以演示该问题的示例。可以在这里获取原始数据。
要关闭 SSH 连接,我正在调用ACTIVE_CLIENTS[HOST].transport.conn.transport(t.c.c.d.SSHClientTransport instance).loseConnection()
which calls t.c.c.d.SSHClientTransport.sendDisconnect()
。这是 sendDisconnect() 方法:
调用此方法时,self.factory.d 似乎始终为 None,因此它在不调用 tcstSSHClientTransport.sendDisconnect() 的情况下返回。我认为它最初是 tccdconnect 中的一个延迟集,但在某些时候它被设置为 None。
我怀疑 SSHClientTransport.loseConnection() 是关闭 SSH 连接的正确方法,但是为什么 self.factory.d 设置为 None 当 twisted 期望它是别的东西时?
如果 lostConnection() 不是关闭 SSH 连接的正确方法,有人能指出我正确的方向吗?
python - 我如何(我可以?)从命令中获取退出状态?
使用twisted.conch
,我正在使用以下SSHChannel
实现,该实现在实例化时提供要运行的命令:
为此,我提供了一个应该返回某种退出状态的 shell 命令。我可以阅读退出状态吗?我曾希望extReceived
可能是我的方式,但它看起来不像。
在我的日志中,我看到了这一点,这似乎应该是一个提示,但我不确定如何遵循所说的提示:
python - 通过 ssh 与 Twisted Conch 连接时出错
我想使用 DSA 私钥或公钥(公钥已从私钥生成)通过 ssh 连接到远程服务器,但出现此错误:
这是我的脚本(Twisted Conch):
这是完整的日志:
所以,问题是我的代码有什么问题,因为我可以使用 OpenSSH SSH 客户端和 paramiko lib 连接到我的服务器而不会出现任何错误。
python - Twisted Conch 数据包完整性错误
当我使用 Twisted conch 连接时,我在 /var/log/secure.log 中的 serverloop.c:980 处收到数据包完整性错误(剩余 6 个字节),然后连接断开(“断开连接:数据包完整性错误”)
服务器是 VMware 系统,系统之间没有防火墙或其他安全措施。我还看到身份验证成功运行(接受来自端口 ssh2 的密码)。
我的 ssh.py 与示例几乎相同:
我不知道如何继续寻求让这个例子发挥作用。任何意见,将不胜感激。
python - 如何管理 Twisted SSH 服务器连接
我需要创建接受多个命令的扭曲 SSH 服务器。但主要特点是服务器应该管理连接。更具体地说,如果持续时间超过 10 分钟(例如),则需要关闭打开的连接。或者如果已经有 10 个打开的连接,它不应该接受新连接。
事实上,我仍然无法完全理解所有这些领域、化身、协议和门户等是如何相互作用的。而且我觉得非常缺乏文档。有几个例子,但没有任何关于每一步究竟发生了什么的评论。
无论如何,尝试和失败我能够将所需命令的执行添加到扭曲的简单 ssh 服务器示例。但是我完全不知道如何拒绝新连接或关闭现有连接或为新连接添加一些时间标志,可用于在达到时间限制时关闭连接。
任何帮助,将不胜感激。请善待我,我从未与 Twisted 合作过,实际上我是 python 的新手 :)
谢谢你。
ps 对于可能的错误,我很抱歉,英语不是我的母语。
python - Twisted Conch - 服务器/客户端
我正在寻找类似于以下内容的 Twisted Conch 服务器/客户端 SSH 应用程序:
客户端 <---Key1---> 服务器/客户端 <---Key2---> 服务器
我猜它就像一个 SSH MITM 或命令代理。
我已经阅读了类似 Twisted 相关问题的答案,例如: Twisted 服务器-客户端数据共享 ,并且我了解传递客户端/服务器数据背后的理论。
我不确定的部分是用户身份验证。我想通过我的扭曲海螺应用程序将第一个客户端的登录详细信息传递到端点服务器。有没有办法做到这一点?
此外,是否可以进行单独的 SSH 密钥协商,然后在服务器和客户端之间传递所有数据,包括凭据和键入的任何命令?
python - 如何使用 Twisted 在 SSH 中传输任何 Twisted 协议(比如 HTTP)?
我想使用 Twisted 通过 SSH 隧道发出 HTTP 请求。我见过使用 Twisted 设置 SSH 本地端口转发的示例,但这不是我所追求的。
相反,在我看来,应该可以使用 Twisted 将 HTTP 流量直接包装在 SSH 隧道内 - 即。无需设置 Twisted 来侦听本地端口以转发流量。
我在 conch.ssh.forwarding 中检查了 Twisted Conch 命令行脚本是如何进行本地端口转发的。是否应该以某种方式与 HTTP 客户端集成?或者,另一方面,我读过 SSHChannel 支持 twisted.internet.interfaces.ITransport 接口,因此可以将它提供给协议以通过安全连接运行它们?然后是 Twisted 中的新端点 API:我想知道用于从 ssh 服务器向前传输流量的端点是否有意义?
或者是其他东西?