Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:modulos:paramiko

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:python:modulos:paramiko [2020/11/10 13:15] – [Conexión con credenciales] tempwininformatica:programacion:python:modulos:paramiko [2020/11/10 13:54] (actual) – [Transferencia de ficheros] tempwin
Línea 7: Línea 7:
 Paramiko permite que el usuario se valide tanto por contraseña como por par de llaves, Paramiko permite que el usuario se valide tanto por contraseña como por par de llaves,
  
 +===== Instalación =====
 +
 +Se puede instalar mediante ''pip'': ''pip install paramiko''
 ===== SSH ===== ===== SSH =====
  
Línea 18: Línea 21:
  
 # Establecer política por defecto para localizar la llave del host localmente # Establecer política por defecto para localizar la llave del host localmente
 +# Si no lo indicamos y queremos conectarnos mediante usuario y contraseña,
 +# Paramiko mostrará una excepción 'SSHException' porque el servidor al que 
 +# queremos conectarnos no dispone de la clave pública del equipo local
 ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  
Línea 26: Línea 32:
 entrada, salida, error = ssh_client.exec_command('ls -la') entrada, salida, error = ssh_client.exec_command('ls -la')
  
-# Mostrar la salida estándar en pantalla +# Mostrar la salida estándar en pantalla (en este caso es una lista de líneas) 
-print(salida.read())+print(salida.readlines())
  
 # Cerrar la conexión # Cerrar la conexión
Línea 33: Línea 39:
 </code> </code>
  
 +Si no queremos que la contraseña quede almacenada en el código, se puede pedir por pantalla para introducirla por teclado:
 +
 +<code python>
 +from getpass import getpass
 +import paramiko
 +
 +clave = getpass('Clave: ')
 +HOST = '123.456.78.90'
 +PUERTO = 372
 +USUARIO = 'juanperez'
 +
 +datos = dict(hostname=HOST, port=PUERTO, username=USUARIO, password=CLAVE)
 +ssh_client = paramiko.SSHClient()
 +ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 +ssh_client.connect(**datos)
 +entrada, salida, error = ssh_client.exec_command('ls -la')
 +print(salida.read())
 +ssh_client.close()
 +</code>
 +
 +==== Conexión mediante clave pública ====
 +
 +Para conectarse evitando la utilización de una contraseña, se tiene que haber creado una llave pública que el usuario debió enviar al servidor.
 +
 +<code python>
 +import paramiko
 +
 +HOST = '123.456.78.90'
 +PUERTO = 372
 +USUARIO = 'juanperez'
 +
 +datos = dict(hostname=HOST, port=PUERTO, username=USUARIO)
 +ssh_client = paramiko.SSHClient()
 +
 +ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 +ssh_client.connect(**datos)
 +entrada, salida, error = ssh_client.exec_command('ls -la')
 +print(salida.read())
 +ssh_client.close()
 +</code>
 +
 +Si queremos utilizar otra clave, la tenemos que especificar a la hora de hacer la conexión:
 +
 +<code python>
 +ssh_client.connect(hostname = "123.456.78.90", username = "usuario", key_filename="ruta/clave_privada", port = 22)
 +</code>
 ===== Conexión SSH anidada ===== ===== Conexión SSH anidada =====
  
Línea 41: Línea 93:
 import sys import sys
 import subprocess import subprocess
-+
-# we instantiate a new object referencing paramiko's SSHClient class +
-#+
 jumphost = "192.168.1.10" jumphost = "192.168.1.10"
 server = "192.168.1.11" server = "192.168.1.11"
  
 +# we instantiate a new object referencing paramiko's SSHClient class
 vm = paramiko.SSHClient() vm = paramiko.SSHClient()
 vm.set_missing_host_key_policy(paramiko.AutoAddPolicy()) vm.set_missing_host_key_policy(paramiko.AutoAddPolicy())
Línea 63: Línea 114:
 stdin, stdout, stderr = jhost.exec_command("cat /home/server") stdin, stdout, stderr = jhost.exec_command("cat /home/server")
 # #
-print stdout.read() #edited#+print(stdout.read()) #edited#
 # #
 jhost.close() jhost.close()
 vm.close() vm.close()
 +</code>
 +
 +===== Transferencia de ficheros =====
 +
 +<code python>
 +import paramiko
 +
 +ssh = paramiko.SSHClient()
 +ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 +ssh.connect(hostname = "", username = "", password = "", port = 22)
 +
 +sftp_client = ssh.opensftp()
 +
 +# Listamos las operaciones que podemos realizar sobre el nuevo objeto
 +print(dir(sftp_client))
 +
 +# Descargamos un fichero desde servidor al equipo local
 +sftp_client.get("/ruta/al/archivo/remoto.ext", "/ruta/destino/archivo/local.txt")
 +
 +# Subimos un fichero al servidor SSH
 +sftp_client.put("/ruta/destino/archivo/local.txt", "/ruta/al/archivo/remoto.ext")
 +
 +sftp_client.close()
 +ssh.close()
 </code> </code>
informatica/programacion/python/modulos/paramiko.1605010517.txt.gz · Última modificación: por tempwin