ftp mendukung put "|..." "remote-file.name"
perintah untuk menyalurkan data ke koneksi ftp. Apakah ada yang serupa tersedia untuk sftp?
Di sftp saya mendapatkan kesalahan berikut:
sftp 'jmw@backupsrv:/uploads'
sftp> put "| tar -cx /storage" "backup-2012-06-19--17-51.tgz"
stat | tar -cv /storage: No such file or directory
seperti di atas klien sftp tidak jelas menjalankan perintah.
saya ingin menggunakan perintah pipa untuk secara langsung mengarahkan aliran file ke sftp. (karena tidak ada ruang yang tersisa untuk membuat file cadangan pada disk yang sama sebelum mengunggahnya ke server sftp.)
Jawaban:
Saya bersenang-senang mencari solusi untuk masalah ini. Ini membutuhkan alat nc (netcat) di kedua mesin, dan SSH (SFTP tidak diperlukan).
Dalam contoh ini, saya akan memanggil mesin yang memiliki data yang perlu didukung linux-a, dan mesin yang perlu menerima cadangan linux-b.
Di linux-a, minta netcat mendengarkan di port (saya ambil 2000) dan mengarahkannya ke file. Ini hanya akan duduk di sana dan menunggu sampai sesuatu terjadi pada port itu.
Di linux-b, buka terowongan ssh ke linux-a, saya menggunakan port 2000 lagi. Ini akan mengarahkan ulang apapun yang Anda lemparkan ke TCP port 2000 di localhost ke TCP port 2000 di linux-a, tempat netcat mendengarkan.
Sekarang buat arsip tar, tetapi kirim output ke stdout (using -) dan pipa ke gzip untuk beberapa kompresi. Sekarang pipa itu ke netcat lain yang mengirimkannya ke localhost pada TCP pada port 2000.
Dilakukan! Di linux-b, netcat tidak lagi mendengarkan, dan file baru dibuat. Bagian terbaiknya adalah arsip tar tidak pernah ditempatkan pada hard disk linux-a.
Saya tahu itu tidak persis apa yang Anda minta dalam pertanyaan, tetapi jika Anda memiliki netcat tersedia, itu solusi yang layak untuk jenis masalah Anda.
Sunting: Saya lupa satu hal: jika Anda mengikuti petunjuk ini, Anda masih akan memiliki terowongan SSH yang beredar di linux-a. Cari tahu apa ID proses itu dan bunuh.
sumber
Karena ini adalah hasil pertama yang Anda temukan dengan googling untuk pertanyaan ini dan belum disebutkan, saya akan menambahkan solusi yang saya temukan di sini juga:
Anda dapat menggunakan implementasi ikal sftp untuk ini. Karena curl mungkin sudah diinstal pada banyak sistem, ini mungkin lebih disukai daripada solusi menggunakan klien kustom.
contoh penggunaan:
curl
menggunakan.ssh/known_hosts
file Anda untuk verifikasi kunci. Ini mungkin gagal jika ssh client Anda menggunakan standar enkripsi yang lebih baru yang tidak didukung oleh perpustakaan yang digunakan dalam curluntuk memperbaikinya, Anda dapat menambahkan jenis kunci lain ke file host yang dikenal menggunakan perintah berikut:
atau Anda dapat menonaktifkan verifikasi kunci menggunakan
-k
bendera (meskipun saya tidak akan merekomendasikannya)sumber
output-stream-generating-command | ssh user@remotehost 'input-stream-accepting-command'
adalah opsi, jika pengguna jarak jauh Anda memiliki shell yang valid.sumber
this
saja." - ini menurut saya sebagai salah satu dari waktu-waktu itu.S
bit ecure dengan membiarkan seseorang masuk situasi Anda yang tidak memiliki program shell run) Saya bisa saja salah - saya kebanyakan terbiasa dengan fungsi SFTP di OpenSSH dan server SSH milik Sun yang digunakan untuk mengirim ...voretaq7 menunjukkan, bahwa klien sftp tidak mendukung transfer data yang disalurkan untuk pengguna, yang diizinkan untuk menggunakan sftp hanya untuk terhubung ke server.
untungnya, ada libssh2, yang mendukung sftp. jadi kita hanya perlu 2 klien lain menggunakan libssh2, yang saya sebut:
kode sumber dapat ditemukan di bawah URL berikut: http://www.qxs.ch/2012/07/05/sftp-upload-tool/
karena saya tidak berpengalaman dalam pemrograman libssh2, saya senang atas umpan balik ke kode sumber.
sumber