Salin file tanpa enkripsi (ssh) di jaringan lokal

22

scpberfungsi dengan baik dalam semua kasus, tetapi Raspberry Pi lemah untuk menyalin file secara efisien dalam lingkungan yang aman (lan). Secara teoritis, 6,75 MB / s melalui 54 Mbit nirkabel dan menyusut menjadi sekitar 1,1 MB / s.

Apakah ada cara untuk menyalin file dari jarak jauh tanpa enkripsi?

Ini harus berupa perintah cli tanpa ketergantungan pada layanan tambahan (ftp, samba) atau setidaknya dengan konfigurasi minimum. Maksud saya, alat standar yang bekerja cukup baik di luar kotak dengan program / layanan standar (seperti scp / ssh).

ManuelSchneid3r
sumber
2
"Tanpa ketergantungan" sebenarnya tidak mungkin. Anda akan selalu memerlukan program yang "mendengarkan" di satu sisi (seperti server ssh / sftp saat menggunakan scp)
umläute
2
Bagaimana dengan netcat ?
yegorich
Oke kamu benar. Saya akan mengubah persyaratan
ManuelSchneid3r
@ umläute kecuali jika Klien dapat ssh / rsh ke server dan berkomunikasi melalui stdin / out. Di masa lalu pip pipa tar ke tar yang dipanggil dari jarak jauh adalah cara untuk dengan mudah menyalin pohon direktori dari satu mesin ke komputer lain.
Thorbjørn Ravn Andersen

Jawaban:

14

Anda mungkin mencari rcp, ia melakukan eksekusi jarak jauh melalui rshsehingga Anda harus mengandalkan itu dan perlu diingat bahwa semua komunikasi tidak aman.

YoMismo
sumber
12

Anda tidak dapat menonaktifkan enkripsi sepenuhnya pada ssh / scp tetapi Anda dapat memaksanya untuk menggunakan cipher yang lebih lemah yang jauh lebih sedikit cpu intensif. Pastikan kompresi tidak diaktifkan di ssh_config Anda atau di baris perintah dan tambahkan -c arcfour,blowfish-cbcke baris perintah scp Anda untuk memilih sandi yang lebih lemah.

selesai24
sumber
1
Ini ide yang bagus. Apakah ini mungkin untuk konfigurasi khusus host? (.ssh / config)
ManuelSchneid3r
3
@ ManuelSchneid3r: Ya: di bawah Hostbagian di ssh_config Anda, gunakan Ciphers arcfour,blowfish-cbcuntuk mencerminkan -csakelar di atas . Namun, jika CPU Anda mendukung set instruksi AES-NI, saya akan mencoba beralih ke [email protected](ya, itu nama sandi, termasuk @barang - barangnya), yang akan menggunakan sangat cepat (dengan AES-NI) AES128-GCM.
Reid
Saya tidak akan benar-benar menyebut blowfish sebagai cipher yang lemah dalam kasus umum (mis. Bukan R-Pi) AE mungkin didorong oleh akselerasi hw.
peterph
9

Saya menulis skrip cepat ini:

#!/bin/bash

ssh "$1" "nc -l 2020 > \"$2\" &"
pv "$2" | nc "$1" 2020

Dibutuhkan dua argumen, host untuk mengirim dan file yang Anda kirim. Ini hanya berfungsi untuk satu file. Ia menggunakan ssh untuk memulai netcatmendengarkan pada ujung yang berlawanan dan kemudian menggunakannya netcatuntuk mengirimkannya ke port mendengarkan. Saya menambahkan pvke awal untuk memberikan progress bar yang bagus. Ganti pvdengan catjika Anda tidak memiliki atau menginginkannya. Ubah port 2020 menjadi apa pun yang Anda suka. Ini mengharuskan Anda untuk memiliki akses ssh ke sistem jarak jauh.

Ini sama sekali tidak aman, tetapi kemudian, itulah yang Anda inginkan.

Ben Collins
sumber
9

Saya pikir NFS cukup diremehkan untuk tugas semacam ini, di mana Anda menginginkan kenyamanan, kecepatan dan tidak peduli dengan keamanan. NFS sangat sederhana untuk diatur, terutama pada klien: lihat panduan singkat ini untuk ubuntu , bersama dengan halaman bantuan komunitas ubuntu yang lebih panjang ini . Dari perspektif klien Anda hanya memasang direktori server dan itu terlihat seperti drive lokal dan Anda dapat menggunakan cpatau rsyncatau perintah apa pun yang Anda inginkan.

TooTone
sumber
Apa pengalaman Anda dengan kecepatan seperti apa yang diharapkan?
Thorbjørn Ravn Andersen
1
@ Thorbjørn Ravn Andersen untuk NFS menggunakan gigabit Ethernet dan PCIe3 x4 SSD Saya menemukan jaringan adalah hambatan. Menggunakan QDR Infiniband alih-alih gigabit Ethernet, SSD adalah hambatannya. Server NFS kernel Linux adalah overhead yang cukup rendah.
Eric M
4

Ada patch untuk openssh untuk HPC (High Performance Computing) yang meningkatkan throughput ssh dengan meningkatkan ukuran jendela transfer dan menonaktifkan enkripsi - jika Anda tidak keberatan mengkompilasi ulang (dan mungkin patch port forwarding), periksa HPN-SSH . Seperti BowlOfRed melihat dalam komentar, Anda akan perlu menggunakan patch pada kedua klien dan server.

Anda juga dapat menggunakan rsync- di satu mesin sebagai daemon dan sebagai klien sederhana di yang lain. Ini sangat berguna untuk menyinkronkan volume yang lebih besar melalui tautan jaringan yang lebih lambat daripada membaca (dan memeriksa) file, karena ia dapat mentransfer hanya bagian-bagian file yang berbeda antara klien dan server. Lihat rsync(1)dan rsyncd.conf(5)halaman manual untuk detailnya.

peterph
sumber
4
Ini tidak eksplisit dalam jawaban Anda, tetapi tambalan ini mencakup kemampuan untuk menggunakan sandi "tidak ada" di SSH (dengan kata lain, nonaktifkan sepenuhnya enkripsi). Kekurangannya adalah Anda harus menerapkan dan menjalankannya di kedua ujungnya. Server normal tidak akan menerima sandi "tidak ada".
BowlOfRed
Poin yang sangat bagus!
peterph
4

Script bash di atas oleh Ben Collins adalah solusi yang baik, tetapi ia kehilangan -pbendera untuk port di sisi server. Menjalankan itu sebagaimana adanya hanya akan memberi Anda file kosong atau server macet yang tidak pernah melakukan apa pun.

Lebih mudah untuk melihat apa yang dilakukan jika Anda hanya melihat perintah.

DestinationShell# nc -l -p 2020 > file.txt

SourceShell# cat file.txt | nc dest.ip.address 2020

nc, atau netcat, seperti kucing kecuali untuk output yang digaungkan ke komputer lain melalui koneksi TCP. Anda hanya mendorong output dari nc di server ke file tujuan. Anda dapat mengatur Tujuan dengan cara yang sama dan melakukan echo foo | nc dest.ip.address 2020dan melakukan segala macam hal lain dengan nc.

Preston Louis Ursini
sumber
2

sudah beberapa waktu sejak pembaruan terakhir, beberapa cipher telah berubah, dan setidaknya pada freeBSD, blowfish tidak lagi tersedia. Cipher tercepat yang saya temukan dengan instalasi ssh saat ini adalah -c aes128-cbc.

Nikmati.

Elmar
sumber
0

Jika Anda ingin mentransfer seluruh struktur file, gunakan tar.

dalam sistem penerima:

[]# nc -l 2020 | tar xvf -

kemudian pada sistem pengiriman:

[]# tar cvf - | nc dst.hostname.net 2020

Tonton arsip file di satu sistem dan ekstrak di yang lain;)

pengguna288759
sumber