python - 在 python 中使用 paramiko 库通过 SOCKS 进行动态应用程序级端口转发

标签 python ssh putty paramiko socks

我正在尝试通过以下方式连接到 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 [localhost]port

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

有人可以解释一下,哪里出了问题,以及如何使用 paramiko 以正确的方式做到这一点? 谢谢。

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

最佳答案

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 session 远程转发到端口 8000。

关于python - 在 python 中使用 paramiko 库通过 SOCKS 进行动态应用程序级端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16671668/

相关文章:

docker - 通过 putty 连接到 play-with-docker 实例

php - windows环境下如何通过PHP连接远程Linux box

python打包导致导入错误

Python 行到时间序列列

linux - ssh 命令和引号

ssh - 使用 SSH 和带有 golang 的 pem/key 连接到服务器

ssh - 如何使用 Putty (ssh) 将文件上传到服务器

Python:即使 __init__ 内部的行为改变了类属性,__dict__ 也会显示类对象的类属性

python - Scikit-learn 决策树提取特征节点

git - 连接 Bitbucket 时更改 SSH 用户名