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
' kessh-keyscan
perintah) ssh-keyscan
menulis distderr
, bukanstdout
(!), jadibash
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 kessh-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