Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
sshtunnel — Túneis SSH para servidor remoto. | Kitploit
Ferramentas/GitHubGitHub/pahaz/sshtunnel
Utilitários de Propósito GeralSegurança de RedeUtilitários e Frameworks
GitHubpahaz/sshtunnel

sshtunnel

Túneis SSH para servidor remoto.

Ver Repositório
1.3k20213há 1 anoRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

|CircleCI| |AppVeyor| |readthedocs| |coveralls| |version|

|pyversions| |license|

Autor: Pahaz_

Repositório: https://github.com/pahaz/sshtunnel/

Inspirado por https://github.com/jmagnusson/bgtunnel, que não funciona no Windows.

Veja também: https://github.com/paramiko/paramiko/blob/master/demos/forward.py

Requisitos

  • paramiko_

Instalação

sshtunnel_ está no PyPI, então simplesmente execute:

::

pip install sshtunnel

ou ::

easy_install sshtunnel

ou ::

conda install -c conda-forge sshtunnel

para tê-lo instalado no seu ambiente.

Para instalar a partir do código fonte, clone o repositório <https://github.com/pahaz/sshtunnel>_ e execute::

python setup.py install

Testando o pacote

Para executar os testes você primeiro precisa do tox <https://testrun.org/tox/latest/>_ e execute::

python setup.py test

Cenários de uso

Um dos cenários típicos onde sshtunnel é útil está representado na figura abaixo. O usuário pode precisar conectar uma porta de um servidor remoto (por exemplo, 8080) onde apenas a porta SSH (geralmente porta 22) é acessível. ::

----------------------------------------------------------------------

                            |
-------------+              |    +----------+
    LOCAL    |              |    |  REMOTE  | :22 SSH
    CLIENT   | <== SSH ========> |  SERVER  | :8080 web service
-------------+              |    +----------+
                            |
                         FIREWALL (only port 22 is open)

----------------------------------------------------------------------

Fig1: Como conectar-se a um serviço bloqueado por um firewall através de um túnel SSH.

Se permitido pelo servidor SSH, também é possível alcançar um servidor privado (da perspectiva do REMOTE SERVER) não diretamente visível de fora (perspectiva do LOCAL CLIENT). ::

----------------------------------------------------------------------

                            |
-------------+              |    +----------+               +---------
    LOCAL    |              |    |  REMOTE  |               | PRIVATE
    CLIENT   | <== SSH ========> |  SERVER  | <== local ==> | SERVER
-------------+              |    +----------+               +---------
                            |
                         FIREWALL (only port 443 is open)

----------------------------------------------------------------------

Fig2: Como conectar-se ao PRIVATE SERVER através de um túnel SSH.

Exemplos de uso

A API permite inicializar o túnel e iniciá-lo ou usar um contexto with, que cuidará de iniciar e parar o túnel:

Exemplo 1

O código correspondente à Fig1 acima segue, dado que o endereço do servidor remoto é pahaz.urfuclub.ru, autenticação por senha e porta de vinculação local atribuída aleatoriamente.

.. code-block:: python

from sshtunnel import SSHTunnelForwarder

server = SSHTunnelForwarder(
    'alfa.8iq.dev',
    ssh_username="pahaz",
    ssh_password="secret",
    remote_bind_address=('127.0.0.1', 8080)
)

server.start()

print(server.local_bind_port)  # show assigned local port
# work with `SECRET SERVICE` through `server.local_bind_port`.

server.stop()

Exemplo 2

Exemplo de encaminhamento de porta para um servidor privado não diretamente acessível, assumindo autenticação por chave privada protegida por senha, o serviço SSH do servidor remoto está escutando na porta 443 e essa porta está aberta no firewall (Fig2):

.. code-block:: python

import paramiko
import sshtunnel

with sshtunnel.open_tunnel(
    (REMOTE_SERVER_IP, 443),
    ssh_username="",
    ssh_pkey="/var/ssh/rsa_key",
    ssh_private_key_password="secret",
    remote_bind_address=(PRIVATE_SERVER_IP, 22),
    local_bind_address=('0.0.0.0', 10022)
) as tunnel:
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect('127.0.0.1', 10022)
    # do some operations with client session
    client.close()

print('FINISH!')

Exemplo 3

Exemplo de encaminhamento de porta para a porta local MySQL do Vagrant:

.. code-block:: python

from sshtunnel import open_tunnel
from time import sleep

with open_tunnel(
    ('localhost', 2222),
    ssh_username="vagrant",
    ssh_password="vagrant",
    remote_bind_address=('127.0.0.1', 3306)
) as server:

    print(server.local_bind_port)
    while True:
        # press Ctrl-C for stopping
        sleep(1)

print('FINISH!')

Ou simplesmente usando a CLI:

.. code-block:: console

(bash)$ python -m sshtunnel -U vagrant -P vagrant -L :3306 -R 127.0.0.1:3306 -p 2222 localhost

Exemplo 4

Abrindo uma sessão SSH saltando por dois túneis. O transporte SSH e os túneis serão daemonizados, o que não esperará que as conexões parem no momento do fechamento.

.. code-block:: python

import sshtunnel
from paramiko import SSHClient


with sshtunnel.open_tunnel(
    ssh_address_or_host=('GW1_ip', 20022),
    remote_bind_address=('GW2_ip', 22),
) as tunnel1:
    print('Connection to tunnel1 (GW1_ip:GW1_port) OK...')
    with sshtunnel.open_tunnel(
        ssh_address_or_host=('localhost', tunnel1.local_bind_port),
        remote_bind_address=('target_ip', 22),
        ssh_username='GW2_user',
        ssh_password='GW2_pwd',
    ) as tunnel2:
        print('Connection to tunnel2 (GW2_ip:GW2_port) OK...')
        with SSHClient() as ssh:
            ssh.connect('localhost',
                port=tunnel2.local_bind_port,
                username='target_user',
                password='target_pwd',
            )
            ssh.exec_command(...)

Uso da CLI

::

$ sshtunnel --help
usage: sshtunnel [-h] [-U SSH_USERNAME] [-p SSH_PORT] [-P SSH_PASSWORD] -R
                 IP:PORT [IP:PORT ...] [-L [IP:PORT ...]] [-k SSH_HOST_KEY]
                 [-K KEY_FILE] [-S KEY_PASSWORD] [-t] [-v] [-V] [-x IP:PORT]
                 [-c SSH_CONFIG_FILE] [-z] [-n] [-d [FOLDER ...]]
                 ssh_address

Pure python ssh tunnel utils
Version 0.4.0

positional arguments:
  ssh_address           SSH server IP address (GW for SSH tunnels)
                        set with "-- ssh_address" if immediately after -R or -L
Baixar ferramenta