GNU/Linux >> Belajar Linux >  >> Linux

Mengapa menambahkan IP lokal dan nama pengguna di scp mengembalikan kesalahan kunci publik?

Catatan penting:Mesin yang Anda sebut "mesin lokal" sama sekali tidak relevan. Kisah sebenarnya dimulai ketika Anda sudah berada di 100.100.100.1 . Dalam konteks scp dan dalam konteks jawaban ini "lokal" adalah mesin tempat scp dipanggil oleh Anda.

Mengapa [perintah] pertama gagal?

Anda mencoba menyalin antara dua (secara formal) host jarak jauh. scp mengenali [email protected]:/path/1/ sebagai jalur non-lokal. Tidak masalah [email protected] menunjuk ke mesin lokal. Alat tidak (dan tidak seharusnya) memeriksa apakah alamat yang terlihat jauh mengarah ke mesin lokal. Hanya dengan merujuk ke sumber seolah-olah itu jauh, Anda membuat scp memperlakukannya sebagai jauh. Juga tujuannya jauh.

Menyalin antara dua host jarak jauh dapat dilakukan dengan atau tanpa -3 opsi:

-3
Salinan antara dua host jarak jauh ditransfer melalui host lokal. Tanpa opsi ini, data disalin langsung antara dua host jarak jauh. […]

Fragmen tebal berlaku untuk kasus Anda (meskipun scp Anda tidak mendukung -3 ).

Jika Anda menggunakan -v dengan perintah pertama Anda

scp -v -i ~/keyfile -r [email protected]:/path/1/ [email protected]:/path/2/

Anda akan melihat scp terhubung dari host lokal ke host sumber ("kebetulan" menjadi host yang sama) menggunakan kunci yang ditentukan dengan -i . (Tampaknya host dikonfigurasi untuk menerima kunci ini, mungkin karena server lain menggunakan kunci yang sama untuk terhubung.)

Kemudian Anda akan melihat scp lainnya dipanggil pada host sumber. Perintahnya adalah:

scp -v -r /path/1/ [email protected]:/path/2/

-v dan -r ada di sana karena mereka berada di perintah lokal Anda. Jalur sumber diterjemahkan ke jalur lokal; tujuan tidak berubah. Jika perintah ini berhasil dijalankan, data akan "disalin langsung antara dua host jarak jauh".

Perhatikan tidak ada -i . Harus -i ~/keyfile berada di sana? Atau lebih tepatnya -i /home/cindy/keyfile atau lebih? (karena scp lokal mendapatkan sesuatu seperti ini setelah shell lokal memperluas tilde).

Tidak. Secara umum host sumber jarak jauh mungkin (dan biasanya) berbeda dari host lokal. Jalur yang valid untuk host lokal dapat menunjuk ke apa pun atau tidak sama sekali pada host jarak jauh. Jika scp pada host sumber dipanggil dengan -i , itu akan menyebabkan lebih banyak masalah daripada yang bisa dipecahkan. Untung -i tidak menyebar ke perintah yang dipanggil pada host sumber. Namun kemudian host terhubung ke tujuan menggunakan kunci defaultnya atau apa pun yang diperintahkan konfigurasinya untuk digunakan.

Dalam kasus Anda, tampaknya seseorang memerlukan ~/keyfile lokal untuk terhubung ke host tujuan. Host sumber memegang file yang tepat (karena dalam kasus khusus ini lokal dan sumbernya adalah mesin yang sama), tetapi scp perintah yang benar-benar terhubung ke tujuan tidak memiliki -i (sebagaimana mestinya pada umumnya) dan karena itu kuncinya tidak digunakan.

Perintah kedua Anda menggunakan jalur lokal sebagai sumber, hanya tujuan yang jauh. Dalam hal ini kunci ditentukan dengan -i digunakan untuk terhubung dari host lokal ke host tujuan, persis seperti yang Anda rencanakan. Oleh karena itu berhasil.

Perhatikan jika Anda mengonfigurasi mesin lokal untuk menggunakan ~/keyfile secara otomatis untuk terhubung ke server lain (IdentityFile di ~/.ssh/config ), maka perintah pertama akan berhasil. Host lokal tidak perlu terhubung ke dirinya sendiri, hanya untuk memberitahu dirinya sendiri untuk terhubung ke tujuan, tetapi tetap saja itu akan berhasil. Sambungan pertama akan menggunakan ~/keyfile karena -i , sambungan kedua akan menggunakan ~/keyfile karena konfigurasinya.


Dari manual scp, -3 opsi deskripsi:Salinan antara dua host jarak jauh ditransfer melalui host lokal. Tanpa opsi ini, data disalin langsung antara dua host jarak jauh. Perhatikan bahwa opsi ini menonaktifkan pengukur kemajuan dan memilih mode batch untuk host kedua, karena scp tidak dapat meminta sandi atau frasa sandi untuk kedua host.

Menurut deskripsi pertama gagal karena 2 server jarak jauh akan berkomunikasi secara langsung (dalam server 100.100.100.1 nyata akan berkomunikasi dengan server 100.100.100.2 melalui ssh) oleh karena itu Anda harus memilih:

  1. Gunakan opsi -3.
  2. Konfigurasi 2 server jarak jauh agar dapat mengautentikasi dengan keyfile ssh key. Jika Anda dapat masuk dari server 100.100.100.1 ke 100.100.100.2 dengan kunci ssh, perintah asli Anda akan berfungsi.

Linux
  1. Cara memperbaiki kesalahan "verifikasi kunci host gagal"

  2. Mengapa fungsi utama tanpa pernyataan pengembalian mengembalikan nilai 12?

  3. Menginstal R dari repositori CRAN Ubuntu:Tidak Ada Kesalahan Kunci Publik

  1. Kode kesalahan apa yang dikembalikan oleh proses yang segfault?

  2. Mengapa ENOENT berarti Tidak ada file atau direktori seperti itu?

  3. Mengapa lalu lintas jaringan Linux hanya melewati eth0?

  1. Mengapa perpustakaan umum saya memilih Linux dan open source

  2. Pengambilan Kunci Publik tidak diizinkan – Kesalahan MySQL WSO2

  3. Apa Env X=() { :;}; Command' Bash Do Dan Mengapa Tidak Aman?