informatica:programacion:python:modulos:sshtunnel
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| informatica:programacion:python:modulos:sshtunnel [2021/09/10 08:34] – creado tempwin | informatica:programacion:python:modulos:sshtunnel [2021/09/10 10:11] (actual) – [sshtunnel] tempwin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== sshtunnel ====== | ====== sshtunnel ====== | ||
| - | Creación de túneles SSH a servidores remotos con Python | + | Creación de [[informatica: |
| * [[https:// | * [[https:// | ||
| Línea 12: | Línea 12: | ||
| pip install sshtunnel | pip install sshtunnel | ||
| </ | </ | ||
| + | |||
| + | ===== Uso ===== | ||
| + | |||
| + | Los típicos escenarios de uso de este módulo es cuando queremos conectarnos a un puerto de un servidor remoto que solo tiene abierto el puerto del servidor SSH: | ||
| + | |||
| + | < | ||
| + | ---------------------------------------------------------------------- | ||
| + | |||
| + | | | ||
| + | -------------+ | ||
| + | CLIENTE | ||
| + | | ||
| + | -------------+ | ||
| + | | | ||
| + | | ||
| + | |||
| + | ---------------------------------------------------------------------- | ||
| + | </ | ||
| + | |||
| + | Como se puede ver, en ese ejemplo solo tenemos acceso al servidor remoto mediante por el puerto 22 (SSH) y queremos acceder al 8080: | ||
| + | |||
| + | <code python> | ||
| + | from sshtunnel import SSHTunnelForwarder | ||
| + | |||
| + | server = SSHTunnelForwarder( | ||
| + | ' | ||
| + | ssh_username=" | ||
| + | ssh_password=" | ||
| + | remote_bind_address=(' | ||
| + | ) | ||
| + | |||
| + | server.start() | ||
| + | |||
| + | print(server.local_bind_port) | ||
| + | # work with `SECRET SERVICE` through `server.local_bind_port`. | ||
| + | |||
| + | server.stop() | ||
| + | </ | ||
| + | |||
| + | Otro escenario habitual es acceder a otro equipo que está conectado al servidor SSH, pero no tiene visibilidad desde el exterior: | ||
| + | |||
| + | < | ||
| + | ---------------------------------------------------------------------- | ||
| + | |||
| + | | | ||
| + | -------------+ | ||
| + | CLIENTE | ||
| + | | ||
| + | -------------+ | ||
| + | | | ||
| + | | ||
| + | |||
| + | ---------------------------------------------------------------------- | ||
| + | </ | ||
| + | |||
| + | Para poder conectarnos al servidor privado, se debe de crear un túnel SSH a través del puerto 443 del servidor remoto: | ||
| + | |||
| + | <code python> | ||
| + | import paramiko | ||
| + | import sshtunnel | ||
| + | |||
| + | with sshtunnel.open_tunnel( | ||
| + | (REMOTE_SERVER_IP, | ||
| + | ssh_username=" | ||
| + | ssh_password=" | ||
| + | remote_bind_address=(PRIVATE_SERVER_IP, | ||
| + | local_bind_address=(' | ||
| + | ) as tunnel: | ||
| + | client = paramiko.SSHClient() | ||
| + | client.load_system_host_keys() | ||
| + | client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) | ||
| + | client.connect(' | ||
| + | # do some operations with client session | ||
| + | client.close() | ||
| + | print(' | ||
| + | </ | ||
| + | |||
| + | En el ejemplo anterior estamos estableciendo un túnel SSH entre un equipo local y un servidor remoto con SSH y a través de ese túnel creamos una conexión entre el equipo local y el servidor privado solo accesible desde el servidor remoto con SSH. | ||
informatica/programacion/python/modulos/sshtunnel.1631255685.txt.gz · Última modificación: por tempwin
