繁体   English   中英

通过SOCKS5代理连接SSH服务器

[英]Connect to SSH server through SOCKS5 proxy

如何通过 ssh 使用共享密钥与 python 中的袜子进行连接?

我已经测试了几种方法,有什么建议吗?

非常感谢您提前...

进口:

进口帕拉米科
从 paramiko 导入 RSAKey
导入套接字
进口袜子
进口 base64

脚本:

def createSSHClient(server, port, user):
    
    sock=socks.socksocket()
    sock.set_proxy(
        proxy_type=socks.SOCKS5,
        addr='10.0.0.2',
        port=1080,
        username=base64.b64decode('dXNlcg==').decode("utf-8"),
        password=base64.b64decode('cGFzc3dvcmQ=').decode("utf-8")
    )
             
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    privkey = paramiko.RSAKey.from_private_key_file('/home/my-user/.ssh/id_rsa')
    ssh.connect(server, port, user, privkey, sock)
    return ssh

outputsocks = []
ssh = createSSHClient('192.168.1.23', 22, 'my-user')
outputsocks.append((ssh.exec_command('ls -ltr')[1]).read().decode('ascii'))
ssh.close()

print(outputsocks)

Output:

Traceback (most recent call last):
  File "/home/my-user/teste2.py", line 26, in <module>
    ssh = createSSHClient('192.168.1.23', 22, 'my-user')
  File "/home/my-user/teste2.py", line 22, in createSSHClient
    ssh.connect(server, port, user, privkey, sock)
  File "/usr/local/lib/python3.6/site-packages/paramiko/client.py", line 349, in connect
    retry_on_signal(lambda: sock.connect(addr))
  File "/usr/local/lib/python3.6/site-packages/paramiko/util.py", line 283, in retry_on_signal
    return function()
  File "/usr/local/lib/python3.6/site-packages/paramiko/client.py", line 349, in <lambda>
    retry_on_signal(lambda: sock.connect(addr))
TimeoutError: [Errno 110] Connection timed out

注意:如果您通过 socks 删除连接并使用不需要 VPN 的主机,则相同的脚本有效,socks 凭据正确且共享密钥有效。

错误是在启动 SSH 之前未通过 sock 打开连接,这已通过sock.connect()解决

更多信息: 套接字连接()与绑定()

错误修复:

def createSSHClient(server, port, user):
    
    sock=socks.socksocket()
    sock.set_proxy(
        proxy_type=socks.SOCKS5,
        addr='10.0.0.2',
        port=1080,
        username=base64.b64decode('dXNlcg==').decode("utf-8"),
        password=base64.b64decode('cGFzc3dvcmQ=').decode("utf-8")
    )
    sock.connect(('192.168.1.20',22))
             
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    privkey = paramiko.RSAKey.from_private_key_file('/home/my-user/.ssh/id_rsa')
    ssh.connect(server, port, user, privkey, sock)
    return ssh

outputsocks = []
ssh = createSSHClient('192.168.1.23', 22, 'my-user')
outputsocks.append((ssh.exec_command('ls -ltr')[1]).read().decode('ascii'))
ssh.close()
sock.close()

print(outputsocks)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM