GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il modo più semplice per SSH usando Python?

Ho scritto collegamenti Python per libssh2. Libssh2 è una libreria lato client che implementa il protocollo 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)

Non l'ho provato, ma questo modulo pysftp potrebbe aiutare, che a sua volta usa paramiko. Credo che tutto sia lato client.

Il comando interessante è probabilmente .execute() che esegue un comando arbitrario sulla macchina remota. (Il modulo include anche .get() e .put metodi che alludono maggiormente al suo carattere FTP).

AGGIORNAMENTO:

Ho riscritto la risposta dopo che il post sul blog a cui avevo originariamente collegato non è più disponibile. Alcuni dei commenti che fanno riferimento alla vecchia versione di questa risposta ora sembreranno strani.


Puoi codificarlo tu stesso usando Paramiko, come suggerito sopra. In alternativa, puoi esaminare Fabric, un'applicazione python per fare tutte le cose che hai chiesto:

Fabric è una libreria Python e uno strumento da riga di comando progettato per semplificare la distribuzione di applicazioni o l'esecuzione di attività di amministrazione del sistema tramite il protocollo SSH. Fornisce strumenti per eseguire comandi shell arbitrari (come un normale utente di accesso o tramite sudo), caricare e scaricare file e così via.

Penso che questo si adatti alle tue esigenze. Inoltre non è una libreria di grandi dimensioni e non richiede l'installazione del server, sebbene abbia dipendenze da paramiko e pycrypt che richiedono l'installazione sul client.

L'app era qui. Ora può essere trovato qui.

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

Ci sono molti buoni articoli su di esso, anche se dovresti stare attento perché è cambiato negli ultimi sei mesi:

Implementazione di Django con Fabric

Strumenti del moderno Python Hacker:Virtualenv, Fabric e Pip

Implementazione semplice e facile con Fabric e Virtualenv

Successivamente:Fabric non richiede più l'installazione di paramiko:

$ 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...

Questo è per lo più cosmetico, tuttavia:ssh è un fork di paramiko, il manutentore per entrambe le librerie è lo stesso (Jeff Forcier, anche l'autore di Fabric), e il manutentore ha in programma di riunire paramiko e ssh sotto il nome paramiko. (Questa correzione tramite pbanka.)


Se vuoi evitare qualsiasi modulo extra, puoi usare il modulo subprocess per eseguire

ssh [host] [command]

e catturare l'output.

Prova qualcosa come:

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

Per gestire nomi utente e password, puoi utilizzare subprocess per interagire con il processo ssh oppure puoi installare una chiave pubblica sul server per evitare la richiesta della password.


Linux
  1. Che cos'è una versione continuativa di Linux e qual è il vero vantaggio del suo utilizzo

  2. Rileva il sistema Init usando la shell?

  3. Ssh:come velocizzare l'accesso Ssh troppo lento?

  4. Python 3 Appindicator3:qual è la dipendenza?

  5. Come connettere l'host remoto usando il comando ssh

Cos'è SSH?

Utilizzo del file di configurazione SSH

Qual è la differenza tra l'uso di `sh` e `source`?

Qual è il modo più semplice per liberare spazio su un disco rigido?

Qual è l'overhead dell'utilizzo di subshell?

Qual è il modo più veloce per eseguire uno script?