我正在尝试使用paramiko
通过netcat弹出SSH会话:
MyLocalMachine ----||----> MiddleMachine --(netcat)--> AnotherMachine
('localhost') (firewall) ('1.1.1.1') ('2.2.2.2')
MyLocalMachine
到的直接连接
AnotherMachine
MiddleMachine
上的SSH服务器将不接受任何打开连接到AnotherMachine
的直接tcpip通道的尝试sshpass
PExpect
我可以部分使用以下代码来实现:
^{pr2}$问题是,因为ProxyCommand
正在使用subprocess.Popen
来运行给定的命令,所以它要求我从用户输入中给密码“ad-hoc”(另外,它要求MyLocalMachine
上的操作系统必须安装ssh
,但情况并非总是如此)。在
由于ProxyCommand
的方法(recv
,send
)是对适当的POpen
方法的简单绑定,我想知道是否可以诱使paramiko客户机使用另一个客户机的会话作为代理?在
更新15.05.18:添加了丢失的代码(复制粘贴神对我不好)。
TL;DR:我使用简单的
exec_command
调用和一个假装为sock
的类来完成这项工作。总结一下:
nc
),尽管任何可以提供基本netcat功能(在套接字和stdin/stdout之间移动数据)的功能都可以。在解决方法是:
化妆师
下面的代码定义了一个可以用来代替
paramiko.ProxyCommand
的类。它提供标准socket
对象所做的所有方法。此类的init方法采用exec_command()
通常返回的3元组:注意:我已经对它进行了广泛的测试,但你不应该把任何事情都当作理所当然。这是一次黑客攻击。
用法
以下是我如何使用上述类来解决我的问题:
^{pr2}$等等。在
最好将此作为建议答案发布,您可以执行以下操作:
代码没有经过测试,也不会工作,因为它非常不完整。我建议你检查一下这个神奇的图腾供参考http://www.revsys.com/writings/quicktips/ssh-tunnel.html
从中间的机器
从本地计算机:
^{pr2}$相关问题 更多 >
编程相关推荐