Saya punya satu file besar di server one
dan saya ingin menyalinnya ke server two
menggunakan scp
. Saya memiliki pengaturan tombol yang benar dan saya dapat ssh / scp ke kedua server dari desktop saya.
File yang saya perlu salin lebih besar daripada ruang kosong di hdd workstation saya, jadi saya ingin melakukan:
scp one:/opt/bigfile.tar.gz two:/opt/bigfile.tar.gz
tapi saya mendapat:
ssh: Could not resolve hostname one: Name or service not known
Kami tidak memiliki DNS di sini (jangan tanya kenapa), jadi saya punya ini di ~ / .ssh / config saya:
Host one
Hostname <IP address of server one>
User jspurny
Host two
Hostname <IP address of server two>
User jspurny
Jika saya mencoba dengan file yang lebih kecil dan mentransfernya dari one
ke workstation saya dan kemudian ke two
, itu berfungsi dengan baik:
scp one:/opt/smallerfile.tar.gz .
scp smallerfile.tar.gz two:/opt/
Saat menggunakan alamat IP secara langsung seperti yang disarankan dalam komentar, saya mendapat:
$ scp jspurny@<one's IP>:bigfile.tar.gz jspurny@<two's ip>:bigfile.tar.gz
Host key verification failed.
lost connection
Bukan masalah:
Ukurannya bukan masalah di sini - itu hanya "pemicu" untuk masalah ini karena tidak ada cara untuk menyimpan bigfile.tar.gz
di workstation saya. Masalah terjadi terlepas dari ukuran file.
Pertanyaan:
Mengapa perintahnya:
scp oneremote:file secondremote:file
melempar kesalahan terlepas dari apakah menggunakan .ssh/config
alias atau langsung menggunakan alamat ip?
Diselesaikan - semacam - masih mencari penjelasan - Saya telah membagi file besar ke file yang lebih kecil dan mentransfernya satu per satu melalui workstation saya. Saya masih bertanya-tanya mengapa itu tidak berhasil. Jadi saya masih akan menghargai beberapa penjelasan tentang apa yang salah ..
Menemukan alasan mengapa gagal: Sepertinya saya bodoh. Saya pikir itu perintahnya
scp one:file two:file
sedang membuat dua koneksi ke setiap server dan kemudian menerima data dari satu dan segera mengirimkannya ke dua dan dengan demikian bertindak seperti relay.
Ini jelas bukan masalahnya, karena -v
opsi sederhana mengungkapkan bahwa sebenarnya hanya terhubung ke satu dan dari satu ia mencoba untuk terhubung ke dua . Yang jelas tidak mungkin karena server satu seharusnya tidak terhubung ke dua .
Jawaban:
Pipa sederhana
Coba ini:
Yang pertama harus mengirim konten file ke mesin Anda, sedangkan yang kedua harus mengirim yang ke mesin kedua. Saya akan menghitung checksum di kedua ujung setelah transfer, untuk memastikan bahwa tidak ada yang hilang atau rusak di sepanjang jalan.
Terowongan yang rumit
Untuk aplikasi yang lebih rumit, Anda bisa menggunakan terowongan ssh. Misalnya, Anda dapat mencoba sesuatu seperti ini:
Kemudian Anda dapat membuka koneksi
one
kelocalhost
port mesin5001
dan itu akan diteruskan dua kali dan berakhir sebagai koneksitwo
kelocalhost
port22
. Ini adalah port ssh, jadi Anda dapat menggunakan ini untuk scp lain, atau untuk rsync, atau apa pun. Anda juga dapat memulairsync
servertwo
, dan meneruskan port 873 alih-alih 22. Atau Anda dapat menggunakannc
di kedua sisi untuk mentransfer data mentah, menggunakan nomor port yang sewenang-wenang.Manfaat utama antara pendekatan di atas adalah bahwa Anda memiliki koneksi tcp dua arah antara kedua mesin, alih-alih pipa satu arah saja. Dengan begitu, kedua pihak dapat bertukar informasi, yang sangat penting dalam
rsync
kasus ini.sumber
Kredit penuh untuk jawaban ini pergi ke /superuser//a/602436/142948
Anda memerlukan
-3
opsi untuk scp:http://www.openbsd.org/cgi-bin/man.cgi?query=scp&sektion=1
Kalau tidak alias 2 "sedang diselesaikan pada host" satu " , yang mungkin tidak ada.
sumber
Karena Anda memiliki akses pengguna ke server sumber (satu) mengapa tidak masuk dan menjalankan perintah scp Anda di server itu secara langsung ... Jika Anda khawatir itu akan memakan waktu terlalu lama, kemudian mulai perintah di dalam
screen
lalu lepaskan dari layar denganCtrl+a d
dan biarkan berjalan.Namun, jika Anda harus melakukan ini dari workstation Anda, dan kunci SSH dari sumber ke server tujuan berfungsi dengan baik, maka kirim
scp
perintah sebagai parameterssh
perintah, seperti:sumber
Mencari pesan kesalahan: "Verifikasi kunci host gagal." tampaknya menjadi hal yang paling mudah dilakukan di sini. Saya menemukan Tanya Jawab ini di askubuntu berjudul: Masalah koneksi SSH dengan kesalahan "Verifikasi kunci host gagal ..." .
Salah satu jawaban untuk T&J menyarankan bahwa masalah tersebut terletak pada entri yang bertentangan dalam
~/.ssh/known_hosts
file Anda . Anda dapat menghapus entri yang merepotkan dari file itu menggunakan editor teks apa pun atau Anda dapat menggunakan perintah ini untuk menghapus entri:Dari mana
hostname
alamat IP atau nama server yang Anda coba sambungkan. Semua di atas akan menjadi tuan rumah dua by the way.sumber
one
dantwo
server dari workstation saya tanpa masalah .. masalahnya dimulai ketika saya menjalankanscp one:file two:file
dari workstation. Dan tidak adaknown_hosts
file pada satu atau dua . Saya hanya mencoba untuk menghapus kunci untuk dua (bahkan untuk satu untuk memastikan) di workstation saya tetapi tidak ada yang berubah (kecuali apakah Anda yakin y / n propt).scp workstation:file one:file
danworkstation:file two:file
? Jelas Anda tidak perlu mengatakan "workstation: file" Saya hanya mengatakannya secara eksplisit demi percakapan.workstation$ scp one:file file
danworkstation$ scp file two:file
. Bagaimanapun, saya pikir saya sudah menyelesaikannya. Saya akan menambahkannya sebagai jawaban saya sendiri.