GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la forma más sencilla de SSH usando Python?

He escrito enlaces de Python para libssh2. Libssh2 es una biblioteca del lado del cliente que implementa el protocolo SSH2.

import socket
import libssh2

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('exmaple.com', 22))

session = libssh2.Session()
session.startup(sock)
session.userauth_password('john', '******')

channel = session.channel()
channel.execute('ls -l')

print channel.read(1024)

No lo he probado, pero este módulo pysftp podría ayudar, que a su vez usa paramiko. Creo que todo está del lado del cliente.

El comando interesante es probablemente .execute() que ejecuta un comando arbitrario en la máquina remota. (El módulo también incluye .get() y .put métodos que aluden más a su carácter FTP).

ACTUALIZAR:

He vuelto a escribir la respuesta después de que la publicación del blog a la que originalmente me vinculé ya no está disponible. Algunos de los comentarios que se refieren a la versión anterior de esta respuesta ahora se verán raros.


Puede codificarlo usted mismo usando Paramiko, como se sugirió anteriormente. Alternativamente, puede consultar Fabric, una aplicación de Python para hacer todas las cosas sobre las que preguntó:

Fabric es una biblioteca de Python y una herramienta de línea de comandos diseñada para simplificar la implementación de aplicaciones o la realización de tareas de administración del sistema a través del protocolo SSH. Proporciona herramientas para ejecutar comandos de shell arbitrarios (ya sea como un usuario de inicio de sesión normal o mediante sudo), cargar y descargar archivos, etc.

Creo que esto se ajusta a tus necesidades. Tampoco es una biblioteca grande y no requiere instalación del servidor, aunque tiene dependencias en paramiko y pycrypt que requieren instalación en el cliente.

La aplicación solía estar aquí. Ahora se puede encontrar aquí.

* The official, canonical repository is git.fabfile.org
* The official Github mirror is GitHub/bitprophet/fabric

Hay varios buenos artículos al respecto, aunque debes tener cuidado porque ha cambiado en los últimos seis meses:

Implementando Django con Fabric

Herramientas del Pitón Hacker Moderno:Virtualenv, Fabric y Pip

Implementación simple y fácil con Fabric y Virtualenv

Más tarde:Fabric ya no requiere paramiko para instalar:

$ pip install fabric
Downloading/unpacking fabric
  Downloading Fabric-1.4.2.tar.gz (182Kb): 182Kb downloaded
  Running setup.py egg_info for package fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
Downloading/unpacking ssh>=1.7.14 (from fabric)
  Downloading ssh-1.7.14.tar.gz (794Kb): 794Kb downloaded
  Running setup.py egg_info for package ssh
Downloading/unpacking pycrypto>=2.1,!=2.4 (from ssh>=1.7.14->fabric)
  Downloading pycrypto-2.6.tar.gz (443Kb): 443Kb downloaded
  Running setup.py egg_info for package pycrypto
Installing collected packages: fabric, ssh, pycrypto
  Running setup.py install for fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
    Installing fab script to /home/hbrown/.virtualenvs/fabric-test/bin
  Running setup.py install for ssh
  Running setup.py install for pycrypto
...
Successfully installed fabric ssh pycrypto
Cleaning up...

Sin embargo, esto es principalmente cosmético:ssh es una bifurcación de paramiko, el mantenedor de ambas bibliotecas es el mismo (Jeff Forcier, también autor de Fabric), y el mantenedor tiene planes de reunir paramiko y ssh bajo el nombre de paramiko. (Esta corrección a través de pbanka.)


Si desea evitar módulos adicionales, puede usar el módulo de subproceso para ejecutar

ssh [host] [command]

y capturar la salida.

Prueba algo como:

process = subprocess.Popen("ssh example.com ls", shell=True,
    stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output,stderr = process.communicate()
status = process.poll()
print output

Para manejar nombres de usuario y contraseñas, puede usar el subproceso para interactuar con el proceso ssh, o puede instalar una clave pública en el servidor para evitar la solicitud de contraseña.


Linux
  1. Manera fácil de verificar la prueba de velocidad SSH

  2. ¿Detectar el sistema Init usando el shell?

  3. Ssh:¿cómo acelerar el inicio de sesión de Ssh demasiado lento?

  4. Cómo conectar un host remoto usando el comando ssh

  5. Compara dos imágenes al estilo python/linux

¿Qué es SSH?

Uso del archivo de configuración SSH

¿Cuál es la forma más fácil de liberar espacio en un disco duro?

¿Cuál es la mejor manera de aprender SELinux?

¿Cuál es la sobrecarga de usar subcapas?

¿Cuál es la forma más rápida de ejecutar un script?