Apa cara paling pythonic untuk scp file dengan Python? Satu-satunya rute yang saya ketahui adalah
os.system('scp "%s" "%s:%s"' % (localfile, remotehost, remotefile) )
yang merupakan peretasan, dan yang tidak berfungsi di luar sistem seperti Linux, dan yang membutuhkan bantuan dari modul Pexpect untuk menghindari permintaan kata sandi kecuali Anda sudah menyiapkan SSH tanpa kata sandi yang diatur ke host jarak jauh.
Saya mengetahui Twisted's conch
, tetapi saya lebih suka menghindari mengimplementasikan scp sendiri melalui modul ssh tingkat rendah.
Saya tahu paramiko
, modul Python yang mendukung SSH dan SFTP; tetapi tidak mendukung SCP.
Latar Belakang: Saya tersambung ke router yang tidak mendukung SFTP tetapi mendukung SSH / SCP, jadi SFTP bukan pilihan.
EDIT : Ini adalah duplikat dari Bagaimana cara menyalin file ke server jauh di Python menggunakan SCP atau SSH? . Namun , pertanyaan itu tidak memberikan jawaban khusus-scp yang berhubungan dengan kunci dari dalam Python. Saya berharap cara menjalankan kode sejenisnya
import scp
client = scp.Client(host=host, user=user, keyfile=keyfile)
# or
client = scp.Client(host=host, user=user)
client.use_system_keys()
# or
client = scp.Client(host=host, user=user, password=password)
# and then
client.transfer('/etc/local/filename', '/etc/remote/filename')
scp
berakhir benar-benar memanggilscp
baris perintah yang hanya berfungsi pada * nix.scp -t
atauscp -f
(mode 'ke' dan 'dari', yang ada untuk tujuan sisi server ini). Ini pada dasarnya bagaimana scp bekerja - ia bergantung pada salinan scp lain yang ada di server. Artikel ini menjelaskannya dengan sangat baik: blogs.oracle.com/janp/entry/how_the_scp_protocol_worksimport paramiko
from scp import SCPClient
2. Berikut adalah contoh dari perintah scp.get ():scp.get(r'/nfs_home/appers/xxxx/test2.txt', r'C:\Users\xxxx\Desktop\MR_Test')
pip install scp
:, di versi 0.10.2 saat tulisan ini dibuat.Anda mungkin tertarik untuk mencoba Pexpect ( kode sumber ). Ini akan memungkinkan Anda untuk berurusan dengan permintaan interaktif untuk kata sandi Anda.
Berikut cuplikan contoh penggunaan (untuk ftp) dari situs web utama:
sumber
Anda juga bisa memeriksa paramiko . Tidak ada modul scp (belum), tetapi sepenuhnya mendukung sftp.
[EDIT] Maaf, melewatkan baris di mana Anda menyebutkan paramiko. Modul berikut hanyalah implementasi protokol scp untuk paramiko. Jika Anda tidak ingin menggunakan paramiko atau keong (satu-satunya implementasi ssh yang saya tahu untuk python), Anda bisa mengerjakan ulang ini untuk menjalankan sesi ssh biasa menggunakan pipa.
scp.py untuk paramiko
sumber
Tidak dapat menemukan jawaban langsung, dan modul "scp.Client" ini tidak ada. Sebaliknya, ini cocok untuk saya:
sumber
jika Anda memasang dempul pada win32 Anda mendapatkan pscp (dempul scp).
sehingga Anda dapat menggunakan sistem hack os.s pada win32 juga.
(dan Anda dapat menggunakan agen dempul untuk manajemen kunci)
maaf itu hanya hack (tetapi Anda bisa membungkusnya dengan kelas python)
sumber
Anda dapat menggunakan subproses paket dan panggilan perintah untuk menggunakan perintah scp dari shell.
sumber
Sampai hari ini, solusi terbaik mungkin
AsyncSSH
https://asyncssh.readthedocs.io/en/latest/#scp-client
sumber
Lihatlah fabric.transfer .
sumber
Sudah cukup lama sejak pertanyaan ini diajukan, dan sementara itu, pustaka lain yang dapat menangani ini telah terpotong: Anda dapat menggunakan fungsi salin yang termasuk dalam pustaka Plumbum :
sumber
SshMachine
memang memiliki aksesssh-agent
, jadi jika Anda hanya ingin menghindari mengetik setiap waktu, itu salah satu cara untuk melakukannya. Anda juga dapat mengajukan permintaan fitur pada halaman github timbal.sumber
Jika Anda menggunakan * nix, Anda dapat menggunakan sshpass
sumber
Hmmm, mungkin opsi lain adalah menggunakan sesuatu seperti sshfs (ada juga sshfs untuk Mac). Setelah router Anda dipasang, Anda dapat langsung menyalin file. Saya tidak yakin apakah itu berfungsi untuk aplikasi khusus Anda, tetapi itu adalah solusi yang bagus untuk tetap berguna.
sumber
Saya beberapa waktu lalu saya membuat skrip copy python SCP yang tergantung pada paramiko. Ini termasuk kode untuk menangani koneksi dengan kunci pribadi atau agen kunci SSH dengan otentikasi kata sandi cadangan.
http://code.activestate.com/recipes/576810-copy-files-over-ssh-using-paramiko/
sumber
Saya tidak berpikir ada satu modul yang dapat Anda unduh dengan mudah untuk mengimplementasikan scp, namun Anda mungkin menemukan ini membantu: http://www.ibm.com/developerworks/linux/library/l-twist4.html
sumber