Saya sedang mengerjakan alat sederhana yang mentransfer file ke lokasi yang dikodekan dengan kata sandi juga yang dikodekan. Saya seorang pemula python, tetapi berkat ftplib, itu mudah:
import ftplib
info= ('someuser', 'password') #hard-coded
def putfile(file, site, dir, user=(), verbose=True):
"""
upload a file by ftp to a site/directory
login hard-coded, binary transfer
"""
if verbose: print 'Uploading', file
local = open(file, 'rb')
remote = ftplib.FTP(site)
remote.login(*user)
remote.cwd(dir)
remote.storbinary('STOR ' + file, local, 1024)
remote.quit()
local.close()
if verbose: print 'Upload done.'
if __name__ == '__main__':
site = 'somewhere.com' #hard-coded
dir = './uploads/' #hard-coded
import sys, getpass
putfile(sys.argv[1], site, dir, user=info)
Masalahnya adalah saya tidak dapat menemukan perpustakaan yang mendukung sFTP. Apa cara normal untuk melakukan hal seperti ini dengan aman?
Sunting: Berkat jawaban di sini, saya sudah bisa bekerja dengan Paramiko dan ini adalah sintaksnya.
import paramiko
host = "THEHOST.com" #hard-coded
port = 22
transport = paramiko.Transport((host, port))
password = "THEPASSWORD" #hard-coded
username = "THEUSERNAME" #hard-coded
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
import sys
path = './THETARGETDIRECTORY/' + sys.argv[1] #hard-coded
localpath = sys.argv[1]
sftp.put(localpath, path)
sftp.close()
transport.close()
print 'Upload done.'
Terima kasih lagi!
Jawaban:
Paramiko mendukung SFTP. Saya sudah menggunakannya, dan saya sudah menggunakan Twisted. Keduanya memiliki tempat masing-masing, tetapi Anda mungkin merasa lebih mudah untuk memulai dengan Paramiko.
sumber
Anda harus memeriksa pysftp https://pypi.python.org/pypi/pysftp itu tergantung pada paramiko, tetapi membungkus kasus penggunaan yang paling umum menjadi hanya beberapa baris kode.
sumber
with
dalam contohpip install pysftp
Jika Anda ingin mudah dan sederhana, Anda mungkin juga ingin melihat Fabric . Ini adalah alat penyebaran otomatis seperti Capistrano Ruby, tetapi lebih sederhana dan tentu saja untuk Python. Itu dibangun di atas Paramiko.
Anda mungkin tidak ingin melakukan 'penyebaran otomatis' tetapi Fabric akan cocok dengan kasus penggunaan Anda dengan sempurna. Untuk menunjukkan kepada Anda betapa mudahnya Fabric adalah: file dan perintah fab untuk skrip Anda akan terlihat seperti ini (tidak diuji, tetapi 99% yakin itu akan berhasil):
fab_putfile.py:
Kemudian jalankan file dengan perintah fab:
Dan kamu selesai! :)
sumber
Berikut adalah contoh menggunakan pysftp dan kunci pribadi.
pysftp adalah modul sftp yang mudah digunakan yang memanfaatkan paramiko dan pycrypto. Ini menyediakan antarmuka sederhana untuk sftp .. Hal-hal lain yang dapat Anda lakukan dengan pysftp yang sangat berguna:
Lebih banyak perintah dan tentang PySFTP di sini .
sumber
srv.get(file_path) # Download a file from remote server
dapatkah Anda menjelaskan di mana file tersebut diunduh?Twisted dapat membantu Anda dengan apa yang Anda lakukan, lihat dokumentasinya, ada banyak contoh. Juga merupakan produk matang dengan komunitas pengembang / pengguna besar di belakangnya.
sumber
Dengan RSA Key, lalu rujuk di sini
Potongan:
sumber
Ada banyak jawaban yang menyebutkan pysftp, jadi jika Anda menginginkan pembungkus manajer konteks di sekitar pysftp, berikut adalah solusi yang lebih sedikit kode yang akhirnya tampak seperti berikut ketika digunakan
Contoh (lebih lengkap): http://www.prschmid.com/2016/09/simple-opensftp-context-manager-for.html
Manajer konteks ini kebetulan memiliki logika coba ulang otomatis jika Anda tidak dapat terhubung pertama kali (yang secara mengejutkan terjadi lebih sering daripada yang Anda harapkan dalam lingkungan produksi ...)
Inti manajer konteks untuk
open_sftp
: https://gist.github.com/prschmid/80a19c22012e42d4d6e791c1e4eb8515sumber
Paramiko sangat lambat. Gunakan subproses dan shell, berikut adalah contohnya:
sumber
Sistem PyFiles dengan sshfs adalah salah satu opsi. Ini menggunakan Paramiko di bawah tenda dan menyediakan antarmuka independen paltform lebih bagus di atas.
atau
sumber
Anda dapat menggunakan modul pexpect
Ini adalah posting intro yang bagus
Saya belum menguji ini tetapi harus berhasil
sumber