GNU/Linux >> Belajar Linux >  >> Linux

Perintah apa yang saya gunakan untuk melihat sidik jari kunci ECDSA server saya?

Perintah digunakan

  • Tampilkan ascii-art dari kunci host publik yang disimpan di server (harus dilakukan di sisi server, yang Anda sambungkan KE melalui ssh):

    ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    -l :Menampilkan sidik jari dari file kunci publik yang ditentukan.

    -v :visual (ascii-art)

    -f :berkas

  • Tampilkan ascii-art kunci host publik server jarak jauh (harus dilakukan di sisi klien, yang Anda sambungkan DARI melalui ssh):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    

    -o :opsi

    visualhostkey :visual (ascii-art)

    FingerprintHash :hash algo untuk digunakan

Apa yang harus dilakukan untuk memeriksa keaslian host/server

Pertama, 1. harus dilakukan secara lokal di server (yang ingin Anda sambungkan KE melalui ssh ):ini akan memberi Anda ascii-art pertama. Cetak atau ambil gambar.

Kedua, 2. harus dilakukan pada koneksi SSH pertama; itu akan menampilkan ascii-art kedua. Jika ascii-artnya sama, maka Anda bisa menjawab ya ke "apakah saya percaya?" pertanyaan (mis. Are you sure you want to continue connecting (yes/no) ).

Contoh

  • Sisi server
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6   (ECDSA)
+--[ECDSA  256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+-----------------+
  • Sisi klien
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)? 

Beberapa penjelasan lagi

Perintah pertama akan menampilkan ascii-art yang sesuai dengan sidik jari dari file yang Anda berikan sebagai input. File yang Anda berikan sebagai masukan adalah host publik kunci dari server. Ketika klien terhubung (tidak hanya untuk pertama kali), server akan mengirimkan kunci host publiknya. Kunci host publik ini akan dicari di ~/.ssh/known_hosts . Jika kunci publik ada di file, maka tidak apa-apa:host (server) diketahui, jadi kami melanjutkan ke langkah berikutnya untuk mengautentikasi pengguna (autentikasi pengguna tidak dijelaskan dalam posting ini). Jika kunci publik tidak ada dalam file, maka klien akan menghitung sidik jari kunci host publik ini dengan algoritme hash (algo hash yang berbeda akan memberikan sidik jari yang berbeda). Sidik jari yang dihitung sebelumnya ini ditampilkan (bersama dengan ascii-art jika tersedia opsi yang sesuai) dan Anda harus menjawab ya atau tidak tergantung pada Anda mengenali sidik jari ini atau tidak (sidik jari ini adalah gambar/hash dari kunci host publik dari pelayan). Jika Anda menjawab ya, maka kunci bublic server (bukan sidik jarinya) akan ditambahkan ke file ~/.ssh/known_hosts .

Kita dapat melihat bahwa ~/.ssh/known_hosts berada di bawah direktori home (~) Anda, karena Anda percayai host (server) ini, tetapi pengguna lain mungkin tidak mempercayai hal yang sama seperti Anda. Selain itu, kunci publik host dari server tidak bergantung pada pengguna, sehingga disimpan di /etc/ssh/ .

Perintah kedua akan menampilkan sidik jari dan ascii-art dari kunci publik yang diterima dari host_server_to_connect (menurut algo hash yang diberikan dalam opsi). Ini sama dengan hanya melakukan ssh, tetapi dengan lebih banyak opsi visual, sehingga koneksi akan berlanjut dengan cara yang sama seperti koneksi ssh biasa.


Di sistem saya, saya perlu menentukan kunci MD5 alih-alih SHA256 default:

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub

Ini menampilkan string dalam format yang cocok dengan kesalahan yang saya lihat di klien.


Tunggu, saya menemukannya. Jalankan perintah:

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

Dengan ssh terbaru (OpenSSH_6.0p1, OpenSSL 1.0.0j 10 Mei 2012), saya membuat skrip seperti ini:

ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=

Catatan:

  • jika sshd Anda berjalan pada port khusus, tambahkan '-p portNumber ' ke ssh-keyscan perintah)
  • ssh-keyscan menulis di stderr , bukan stdout (!), jadi bash pengalihan '2>&1 ' (itu dapat bervariasi tergantung pada shell Anda)

Itulah baris yang saya tambahkan ke ~/.ssh/known_hosts saya file untuk mengotorisasi permintaan ssh dari localhost untuk pengujian saya (terutama untuk gitolite, yang menggunakan ssh).

Daniel Böhmer mengonfirmasi dalam komentar:

  • ssh-keyscan menyediakan kunci publik lengkap dari server SSH
  • output dari ssh-keygen hampir identik dengan format file kunci publik.
    Hapus saja kolom pertama (alamat IP atau nama host) dan simpan atau kirimkan ke ssh-keygen -l yang menyajikan sidik jari.

Daniel menambahkan:

Tampilkan sidik jari dari semua kunci publik server yang disimpan di ~/.ssh/know_hosts :

cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done

Linux
  1. Gunakan terminal Linux untuk melihat file apa yang ada di komputer Anda

  2. Cara menggunakan perintah grep Linux

  3. Cara menggunakan perintah history di Linux

  1. Cara Menggunakan Perintah ssh-keygen untuk mengkonfigurasi ssh tanpa kata sandi

  2. Cara menggunakan Perintah ssh-keygen di Linux

  3. Apa gunanya opsi -o dalam perintah useradd?

  1. Cara Menggunakan Perintah sejarah Linux

  2. Bagaimana cara menggunakan perintah nama dasar?

  3. Apa gunanya $# di Bash