GNU/Linux >> Znalost Linux >  >> Linux

Jaký je nejjednodušší způsob, jak SSH používat Python?

Napsal jsem vazby Pythonu pro libssh2. Libssh2 je knihovna na straně klienta implementující protokol 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)

Nezkoušel jsem to, ale mohl by pomoci tento modul pysftp, který zase používá paramiko. Věřím, že vše je na straně klienta.

Zajímavý příkaz je pravděpodobně .execute() který na vzdáleném počítači provede libovolný příkaz. (Modul také obsahuje .get() a .put metody, které více narážejí na jeho FTP charakter).

AKTUALIZACE:

Odpověď jsem přepsal poté, co blogový příspěvek, na který jsem původně odkazoval, již není dostupný. Některé komentáře, které odkazují na starou verzi této odpovědi, budou nyní vypadat divně.


Můžete jej nakódovat sami pomocí Paramiko, jak je navrženo výše. Případně se můžete podívat do Fabric, pythonové aplikace pro provádění všech věcí, na které jste se ptali:

Fabric je knihovna Pythonu a nástroj příkazového řádku navržený pro zefektivnění zavádění aplikací nebo provádění úloh správy systému prostřednictvím protokolu SSH. Poskytuje nástroje pro spouštění libovolných příkazů shellu (buď jako běžný přihlašovací uživatel nebo přes sudo), nahrávání a stahování souborů a tak dále.

Myslím, že to odpovídá vašim potřebám. Není to také velká knihovna a nevyžaduje instalaci na server, i když má závislosti na paramiko a pycrypt, které vyžadují instalaci na klienta.

Aplikace zde bývala. Nyní jej lze nalézt zde.

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

Je o něm několik dobrých článků, i když byste měli být opatrní, protože se za posledních šest měsíců změnil:

Nasazení Djanga pomocí Fabric

Nástroje moderního hackera Pythonu:Virtualenv, Fabric a Pip

Jednoduché a snadné nasazení s Fabric a Virtualenv

Později:Fabric již nevyžaduje instalaci 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...

To je však většinou kosmetické:ssh je fork paramiko, správce obou knihoven je stejný (Jeff Forcier, také autor Fabric) a správce má v plánu znovu sjednotit paramiko a ssh pod názvem paramiko. (Tato oprava přes pbanku.)


Pokud se chcete vyhnout dalším modulům, můžete ke spuštění použít modul subprocess

ssh [host] [command]

a zachytit výstup.

Zkuste něco jako:

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

Chcete-li se vypořádat s uživatelskými jmény a hesly, můžete použít podproces pro interakci s procesem ssh, nebo můžete nainstalovat veřejný klíč na server, abyste se vyhnuli výzvě k zadání hesla.


Linux
  1. Co je to Rolling Release Linux a jaký je skutečný přínos jeho používání

  2. Zjistit iniciační systém pomocí Shell?

  3. Python 3 Appindicator3:Jaká je závislost?

  1. Jak připojit vzdálený hostitel pomocí příkazu ssh

  2. Jaký je správný způsob použití inotify?

  3. Jaký je správný způsob vložení karty do sed?

  1. Snadný způsob, jak zkontrolovat test rychlosti SSH

  2. Jaký je rozdíl mezi použitím `sh` a `source`?

  3. Jaká je režie používání subshellů?