【问题标题】:Python Paramiko script for Tor proxy sshTor 代理 ssh 的 Python Paramiko 脚本
【发布时间】:2017-10-16 10:13:41
【问题描述】:

我使用带有 Paramiko 模块的 Python 脚本通过以下简单代码实现了代理 ssh 连接:

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
proxy_cmd = "connect -R remote -5 -S 127.0.0.1:9050 %h %p"
proxy = paramiko.ProxyCommand(proxy_cmd)
ssh.connect(iptarget, username=user, password=p, sock=proxy)

现在我将使用不同的用户名对同一个 iptarget 执行不同的尝试。我在前面的代码中添加了一个 for 以便为用户列表进行 ssh 连接,即:

listUser=["bob", "user", "1234"]
for user in listUser:
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  proxy_cmd = "connect -R remote -5 -S 127.0.0.1:9050 %h %p"
  proxy = paramiko.ProxyCommand(proxy_cmd)
  ssh.connect(iptarget, username=user, password=p, sock=proxy)
  time.sleep(50)

但我遇到了以下异常:

Exception: Error reading SSH protocol banner
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 2000, in _check_banner
buf = self.packetizer.readline(timeout)
File "/usr/local/lib/python3.5/dist-packages/paramiko/packet.py", line 353, in readline
buf += self._read_timeout(timeout)
File "/usr/local/lib/python3.5/dist-packages/paramiko/packet.py", line 546, in _read_timeout
raise socket.timeout()
socket.timeout

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 1854, in run
self._check_banner()
File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 2005, in _check_banner
'Error reading SSH protocol banner' + str(e)
paramiko.ssh_exception.SSHException: Error reading SSH protocol banner

Exception: ('connect -R remote -5 -S 127.0.0.1:9050 %h %p', 'Broken pipe')
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/paramiko/proxy.py", line 66, in send
self.process.stdin.write(content)
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 1852, in run
self.packetizer.write_all(b(self.local_version + '\r\n'))
File "/usr/local/lib/python3.5/dist-packages/paramiko/packet.py", line 309, in write_all
n = self.__socket.send(out)
File "/usr/local/lib/python3.5/dist-packages/paramiko/proxy.py", line 72, in send
raise ProxyCommandFailure(' '.join(self.cmd), e.strerror)
paramiko.ssh_exception.ProxyCommandFailure: ('connect -R remote -5 -S 127.0.0.1:9050 %h %p', 'Broken pipe')

我认为是因为我启动了许多连接,位于代理命令中,但我不知道如何解决问题。

我更新了代码,它可以工作了:

  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  proxy_cmd = "connect -R remote -5 -S 127.0.0.1:9050 'targetip' 22"
  proxy = paramiko.ProxyCommand(proxy_cmd)
  ssh.connect(iptarget, username=user, password=p, sock=proxy)

但是在for循环中还是不行:

listUser=["bob", "user", "1234"]
for user in listUser:
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  proxy_cmd = "connect -R remote -5 -S 127.0.0.1:9050 192.1.1.1 22"
  proxy = paramiko.ProxyCommand(proxy_cmd)
  ssh.connect(iptarget, username=user, password=p, sock=proxy)
  time.sleep(50)

在这种情况下,我会收到以下错误:

Exception: ('connect -R remote -4 -S 127.0.0.1:9150 192.1.1.1 22', 'Broken pipe')
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/paramiko/proxy.py", line 66, in send
self.process.stdin.write(content)
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 1852, in run
self.packetizer.write_all(b(self.local_version + '\r\n'))
File "/usr/local/lib/python3.5/dist-packages/paramiko/packet.py", line 309, in write_all
n = self.__socket.send(out)
File "/usr/local/lib/python3.5/dist-packages/paramiko/proxy.py", line 72, in send
raise ProxyCommandFailure(' '.join(self.cmd), e.strerror)
paramiko.ssh_exception.ProxyCommandFailure: ('connect -R remote -4 -S 127.0.0.1:9150 192.1.1.1 22', 'Broken pipe')

【问题讨论】:

  • 我的意思是“targetip”,例如 192.1.1.1。我在代码中更新它。谢谢。

标签: python ssh proxy paramiko tor


【解决方案1】:

您可以使用 banner_timeout 来避免此问题。

ssh.connect(iptarget, username=user, password=p, sock=proxy, banner_timeout=120)

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2012-05-16
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多