【问题标题】:Dynamic application-level port forwarding with SOCKS using paramiko library in python在 python 中使用 paramiko 库使用 SOCKS 进行动态应用程序级端口转发
【发布时间】:2013-05-16 07:38:35
【问题描述】:

我正在尝试通过以下方式连接到 SSH 服务器:

import paramiko
import socks
sock = socks.socksocket()
sock.setproxy(socks.PROXY_TYPE_SOCKS5, 'localhost', 22, True)
sock.connect((**IP address of SSH server**, 22))
t = paramiko.Transport(sock)
t.connect( None, 'username', 'password')

并得到以下错误

> Traceback (most recent call last): ...
>     sock.connect((**IP address of SSH server**, 22))   File "C:\Python27\lib\site-packages\socks.py", line 368, in connect
>     _orgsocket.connect(self,(self.__proxy[1],portnum))   File "C:\Python27\lib\socket.py", line 224, in meth
>     return getattr(self._sock,name)(*args) socket.error: [Errno 10061] No connection could be made because the target machi ne actively
> refused it

我的目标是模拟 Putty 创建 SSH SOCKS 代理的方式,如下所示: Configure PuTTY To Create SSH SOCKS Proxy For Secure Browsing。 或等价的

ssh -D [本地主机]端口

用于本地动态应用程序级端口转发。

有人可以解释一下,有什么问题以及如何使用 paramiko 以正确的方式进行操作吗? 谢谢。

附: 我找到了这个https://stackoverflow.com/a/5823383/1264304 但是,我没有成功实现它。有人吗?

【问题讨论】:

  • 有人可以帮我吗? Putty 连接到服务器,但 paramiko 没有。

标签: python ssh putty paramiko socks


【解决方案1】:

Paramiko 可以本地连接到 ssh。您不需要 SOCKS 库来连接到 ssh 服务器。此外,当您尝试时,远程服务器会因为您未进行身份验证而拒绝连接。

正确的做法是联系 paramiko 的sshClient:

import paramiko
ssh = paramiko.SSHClient()
ssh.connect('yourServer', username='you', 
    password='yay!')

然后,得到底层的transport

trans = ssh.get_transport()

最后,让 ssh 客户端用open channel 转发一个 tcp 端口:

trans.open_channel("forwarded-tcpip", dest_addr=('serverIP',8000), src_addr=('localhost'),8000))

这将导致本地端口 8000 上的任何连接通过此 ssh 会话远程转发到端口 8000。

【讨论】:

  • 感谢您的快速回复。我尝试了您的代码,对 dest_adrr = (IP, port)src_addr = (IP, port) 稍作改动,但仍然出现异常:chan = trans.open_channel('forwarded-tcpip', dest_addr = ('132.72.80.162', 2 2), src_addr = ('localhost', 22)) File "C:\Python27\lib\site-packages\paramiko\transport.py", line 773, in open_ channel raise e paramiko.ChannelException: Administratively prohibited
  • @user1264304 您可能需要先致电request_port_forward。或者,您的服务器可能不允许对您选择的任何端口进行端口转发。或者任何端口。
  • @Spencer Rathbun 我猜你是对的。我添加了调用 request_port_forward(serverIP, 22) 并得到了 paramiko.SSHException: TCP forwarding request denied,但是,Putty 的端口转发正在同一台服务器上工作。不清楚为什么。
猜你喜欢
  • 2017-01-22
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 2020-11-13
  • 1970-01-01
相关资源
最近更新 更多