我试图使用python脚本从远程主机获取sql转储,中间主机作为代理,如下所示:
local machine -> proxy -> remote
代理需要存在,因为远程主机仅允许通过该代理进行连接.
注意:我在How to connect to a database through a Paramiko Tunnel (or similar package)知道类似的问题,但解决方案似乎特定于Postgresql.
我通过paramiko使用SSH建立连接.我知道forward.py是端口转发的paramiko示例,但我不确定我是否正确使用它.这就是我做的(PX =代理,RMT =远程):
forward.py --password --host=PX --port=PXport --user=PXusr RMT:RMTport
我得到了这个结果:
*** Unable to open host keys file *** Warning: no host key for PX Connecting to ssh host PX:PXport ... Now forwarding port 4000 to RMT:RMTport ...
然后脚本卡在最后一行.
Q1:有没有人有一个如何使用paramiko的forward.py通过代理连接到远程主机的例子?
Q2:建立连接后,是否可以在远程主机上以编程方式执行shell命令?
解决方法
我最近编写了一个SSHForwarder类,可以执行您想要的操作:
https://gist.github.com/1399529
要使用它,你可以这样做:
try: proxy_host = 'PX' proxy_user = 'PXusr' target_port = RMTport target_host = 'RMT' f = SSHForwarder(proxy_host,target_port,target_host,proxy_user) # .... DO SOME STUFF .... finally: if f: f.close()