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.