Saya sedang menulis skrip untuk mengotomatisasi beberapa perintah baris perintah dengan Python. Saat ini saya sedang melakukan panggilan:
cmd = "some unix command"
retcode = subprocess.call(cmd,shell=True)
Namun saya perlu menjalankan beberapa perintah pada mesin jarak jauh. Secara manual, saya akan masuk menggunakan ssh dan kemudian menjalankan perintah. Bagaimana saya mengotomatisasi ini dengan Python? Saya perlu masuk dengan kata sandi (dikenal) ke mesin jarak jauh, jadi saya tidak bisa hanya menggunakan cmd = ssh user@remotehost
, saya ingin tahu apakah ada modul yang harus saya gunakan?
k = paramiko.RSAKey.from_private_key_file(keyfilename)
ATAUk = paramiko.DSSKey.from_private_key_file(keyfilename)
KEMUDIANssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
dan akhirnyassh..connect(hostname=host, username=user, pkey=k)
.def run_cmd(host, cmd):
yang melakukan apa yang Anda inginkan pada awalnya, tetapi kebutuhan Anda berkembang. Anda akhirnya mengubah helper untuk use case baru, yang mengubah perilaku penggunaan lama yang sudah ada. Rencanakan dengan tepat.Atau Anda bisa menggunakan command.getstatusoutput :
Saya menggunakannya secara luas dan bekerja sangat baik.
Dalam Python 2.6+, gunakan
subprocess.check_output
.sumber
Pernahkah Anda melihat Fabric ? Hal ini memungkinkan Anda untuk melakukan segala macam hal jarak jauh melalui SSH menggunakan python.
sumber
Saya menemukan paramiko agak terlalu rendah, dan Fabric tidak terlalu cocok untuk digunakan sebagai perpustakaan, jadi saya mengumpulkan perpustakaan saya sendiri yang disebut spur yang menggunakan paramiko untuk mengimplementasikan antarmuka yang sedikit lebih bagus:
Jika Anda perlu menjalankan di dalam shell:
sumber
spur
. Anda menghasilkan perintah shell tambahan dan Anda berakhir dengan: which 'mkdir'> / dev / null 2> & 1; echo $?; exec 'mkdir' '-p' '/ data / rpmupdate / 20130207142923'. Saya juga ingin memiliki akses ke dataranexec_command
. Juga hilang kemampuan untuk menjalankan tugas latar belakang:nohup ./bin/rpmbuildpackages < /dev/null >& /dev/null &
. Misalnya, saya membuat skrip zsh (rpmbuildpackages) menggunakan templat dan kemudian saya membiarkannya berjalan di mesin. Mungkin kemampuan untuk memantau pekerjaan latar belakang seperti itu juga akan menyenangkan (menyimpan PID dalam beberapa ~ / .spur).spur
rupanya hanya berfungsi pada sistem unix karena memiliki ketergantungan padatermios
. Adakah yang tahu perpustakaan yang bagus untuk Windows?SshShell
, sekarang ada opsi untuk mengatur tipe shell. Jika shell minimal digunakan dengan melewatishell_type=spur.ssh.ShellTypes.minimal
, maka hanya perintah mentah yang dikirim. Menerapkan tugas-tugas latar belakang secara langsung terasa agak keluar dari ruang lingkup untuk Spur, tetapi Anda harus dapat menjalankan perintah yang telah Anda jelaskan dengan menggunakan shell misalnyashell.run(["sh", "-c", "nohup ./bin/rpmbuildpackages < /dev/null >& /dev/null &"]
).Tetap sederhana. Tidak diperlukan perpustakaan.
sumber
Semua sudah menyatakan (disarankan) menggunakan paramiko dan saya hanya berbagi kode python (API satu dapat mengatakan) yang akan memungkinkan Anda untuk menjalankan beberapa perintah sekaligus.
untuk mengeksekusi perintah pada penggunaan simpul yang berbeda:
Commands().run_cmd(host_ip, list_of_commands)
Terima kasih!
sumber
Saya telah menggunakan paramiko banyak (bagus) dan pxssh (juga bagus). Saya akan merekomendasikan. Mereka bekerja sedikit berbeda tetapi memiliki tumpang tindih yang relatif besar dalam penggunaannya.
sumber
paramiko akhirnya bekerja untuk saya setelah menambahkan baris tambahan, yang sangat penting (baris 3):
Pastikan paket paramiko diinstal. Sumber asli solusinya: Sumber
sumber
sumber
Bekerja dengan Sempurna ...
sumber
Jawaban yang diterima tidak berhasil untuk saya, inilah yang saya gunakan sebagai gantinya:
Atau, Anda dapat menggunakan sshpass :
Referensi:
1. https://github.com/onyxfish/relay/issues/11
2. https://stackoverflow.com/a/61016663/797495
sumber
Lihat
spurplus
, bungkus yang kami kembangkanspur
yang menyediakan anotasi jenis dan beberapa tipuan kecil (menghubungkan kembali SFTP, md5 dll .): Https://pypi.org/project/spurplus/sumber
Meminta Pengguna untuk memasukkan perintah sesuai perangkat tempat mereka masuk.
Kode di bawah ini divalidasi oleh PEP8online.com.
sumber
Contoh di bawah ini, hapus jika Anda ingin input pengguna untuk nama host, nama pengguna, kata sandi dan nomor port.
sumber