GNU/Linux >> Belajar Linux >  >> Linux

Apa cara termudah untuk SSH menggunakan Python?

Saya telah menulis binding Python untuk libssh2. Libssh2 adalah pustaka sisi klien yang menerapkan 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)

Saya belum mencobanya, tetapi modul pysftp ini mungkin membantu, yang pada gilirannya menggunakan paramiko. Saya percaya semuanya adalah sisi klien.

Perintah yang menarik mungkin adalah .execute() yang mengeksekusi perintah sewenang-wenang pada mesin jarak jauh. (Modul ini juga menampilkan .get() dan .put metode yang lebih menyinggung karakter FTP-nya).

PEMBARUAN:

Saya telah menulis ulang jawabannya setelah posting blog yang awalnya saya tautkan tidak tersedia lagi. Beberapa komentar yang mengacu pada versi lama dari jawaban ini sekarang akan terlihat aneh.


Anda dapat mengkodekannya sendiri menggunakan Paramiko, seperti yang disarankan di atas. Sebagai alternatif, Anda dapat melihat Fabric, sebuah aplikasi python untuk melakukan semua hal yang Anda tanyakan:

Fabric adalah pustaka Python dan alat baris perintah yang dirancang untuk merampingkan penerapan aplikasi atau melakukan tugas administrasi sistem melalui protokol SSH. Ini menyediakan alat untuk menjalankan perintah shell sewenang-wenang (baik sebagai pengguna login biasa, atau melalui sudo), mengunggah dan mengunduh file, dan sebagainya.

Saya pikir ini sesuai dengan kebutuhan Anda. Ini juga bukan perpustakaan besar dan tidak memerlukan penginstalan server, meskipun memiliki ketergantungan pada paramiko dan pycrypt yang memerlukan penginstalan pada klien.

Aplikasi ini dulu ada di sini. Sekarang dapat ditemukan di sini.

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

Ada beberapa artikel bagus tentangnya, namun Anda harus berhati-hati karena telah berubah dalam enam bulan terakhir:

Menerapkan Django dengan Fabric

Alat Peretas Python Modern:Virtualenv, Fabric, dan Pip

Penerapan Sederhana &Mudah dengan Fabric dan Virtualenv

Nanti:Fabric tidak lagi memerlukan paramiko untuk menginstal:

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

Ini sebagian besar kosmetik, namun:ssh adalah fork dari paramiko, pengelola untuk kedua perpustakaan adalah sama (Jeff Forcier, juga penulis Fabric), dan pengelola memiliki rencana untuk menyatukan kembali paramiko dan ssh dengan nama paramiko. (Koreksi ini melalui pbanka.)


Jika Anda ingin menghindari modul tambahan apa pun, Anda dapat menggunakan modul subproses untuk menjalankan

ssh [host] [command]

dan menangkap output.

Cobalah sesuatu seperti:

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

Untuk menangani nama pengguna dan kata sandi, Anda dapat menggunakan subproses untuk berinteraksi dengan proses ssh, atau Anda dapat memasang kunci publik di server untuk menghindari permintaan kata sandi.


Linux
  1. Deteksi Sistem Init Menggunakan Shell?

  2. Ssh – Bagaimana Cara Mempercepat Login Ssh yang Terlalu Lambat?

  3. Python 3 Appindicator3:Apa Ketergantungannya?

  1. Cara Menghubungkan Host Jarak Jauh Menggunakan Perintah ssh

  2. Apa perbedaan antara menggunakan `sh` dan `source`?

  3. Apa cara termudah untuk mendeteksi penekanan tombol di python 3 di mesin linux?

  1. Apa itu Rolling Release Linux dan Apa Manfaat Nyata Menggunakannya

  2. Cara Mudah Untuk Memeriksa Tes Kecepatan SSH

  3. Apa overhead menggunakan subkulit?