Shell Selamat (SSH)
SSH ialah protokol yang menjalankan separuh Internet yang tidak kelihatan: setiap konsol jauh pentadbir sistem, setiap langkah penggunaan pembangun, setiap tolakan Git ke repositori peribadi. Ia menggantikan telnet pada akhir 1990-an dan telah menjadi protokol cangkerang selamat lalai sejak itu. Mengetahui apa yang sebenarnya dilakukannya menjadikan banyak operasi berfungsi masuk akal.
Badan artikel penuh disediakan dalam bahasa Inggeris di bawah.
SSH (Secure Shell) ialah protokol rangkaian kriptografi untuk mengendalikan perkhidmatan rangkaian dengan selamat melalui rangkaian tidak terjamin. Paling biasa digunakan untuk log masuk baris arahan jauh ("shell" dalam nama) dan untuk memindahkan fail, tetapi protokol asasnya cukup umum untuk menyalurkan sebarang aplikasi TCP. SSH telah dicipta oleh Tatu Ylönen pada tahun 1995 selepas serangan menghidu kata laluan di universitinya; pelaksanaan OpenSSH (bermula 1999) ialah versi yang paling banyak digunakan hari ini.
Apa yang SSH sediakan
TTiga sifat:
- Confidentiality — disulitkan dalam transit. Pemerhati rangkaian melihat bait yang disulitkan, bukan perintah atau kata laluan.
- Integrity — paket yang diubah suai dikesan dan ditolak.
- Pengesahan kedua-dua hujung — klien mengesahkan, kekunci awam dan pelayan lain, (atau mengesahkan kata laluan kepada pelayan) pelanggan (melalui kunci hos).
Gabungan menggantikan suite lama telnet, rlogin, rsh dan rcp — yang kesemuanya menghantar bukti kelayakan dalam teks biasa.
Cara sambungan SSH berfungsi
PLZPLZ26XJabatan tangan, sim2XXXPL8X8XPLPLX terbuka Sambungan TCP ke pelayan pada port 22 (boleh dikonfigurasikan).
Kaedah pengesahan
- Password. Pengguna menaip kata laluan; ia dihantar disulitkan dalam sesi. Mudah, tetapi terdedah kepada serangan pemadat kelayakan terhadap pelayan SSH terdedah.
- Kunci Awam. Pelanggan mempunyai kunci peribadi (dalam
~/.ssh/id_ed25519biasanya); pelayan mempunyai kunci awam yang sepadan dalam~/.ssh/authorized_keys. Pelanggan membuktikan pemilikan kunci persendirian dengan menandatangani cabaran daripada pelayan. Tiada kata laluan melintasi rangkaian. Lalai yang disyorkan untuk hampir semua kes penggunaan. - Berasaskan sijil. A CA menandatangani sijil untuk kunci pengguna, termasuk tamat tempoh dan kekangan. Pelayan mempercayai CA, secara automatik mempercayai sijil yang ditandatangani. Model yang tepat untuk organisasi yang mempunyai ramai pengguna; menggantikan mimpi ngeri pengedaran kunci-ssh.
- FIDO2 / kunci perkakasan SSH. OpenSSH Terkini menyokong kunci yang disokong oleh token keselamatan perkakasan. Kalis pancingan data, memerlukan pemilikan fizikal.
- Multi-faktor — gabungkan perkara di atas. Kata laluan + kunci atau kata laluan + token perkakasan.
Melebihi akses shell: pemajuan port
SSH boleh terowong trafik TCP sewenang-wenangnya melalui sesi yang disulitkan:
- Lpemajuan port tempatan (8):8
ssh -L 9000:dalaman:3306 pengguna@bastionmembuka port tempatan 9000, yang menyalurkan keinternal:3306melalui hos benteng. Berguna untuk mencapai perkhidmatan dalaman melalui hos lompat. - Pemajuan port jauh (
-R): arah bertentangan. Hos jauh mendapat port yang menyambung semula ke perkhidmatan pada mesin anda. - Pemajuan port dinamik (
-D): SSH mencipta proksi SOCKS5 pada mesin tempatan anda. Mana-mana aplikasi yang ditujukan kepadanya mempunyai trafik TCP yang disalurkan melalui sesi SSH. VPN pengguna tunggal secara berkesan melalui SSH.
SSH pemajuan dinamik ialah satu-satunya VPN orang miskin yang paling berguna; setiap orang yang mempunyai pelayan di suatu tempat mempunyai akses kepadanya.
Ekosistem OpenSSH
- ssh — klien
- sshd — pelayan daemon
- scp — salinan selamat (warisan, kini kebanyakannya digantikan oleh hud)
- sftp — FTP selamat, protokol berasingan yang berjalan di dalam SSH
- ssh-agent — menyahsulit kekunci dalam memori supaya anda tidak memasukkan frasa laluan setiap sambunganXPLXZ21PLZPLZ2Z21PLZ20 PLZ20PLZ21ZPLZ2 menjana pasangan kunci
- ssh-copy-id — menyalin kunci awam anda ke fail kunci_berizin jauh
Mempertahankan pelayan SSH
Pelayan SSH di Internet awam sentiasa melihat bukti kelayakan. Pertahanan:
- Lumpuhkan pengesahan kata laluan. Kunci awam sahaja. Mengalih keluar keseluruhan vektor serangan pemadat kelayakan.
- Gunakan kekunci Ed25519. Moden, pantas, kecil.
ssh-keygen -t ed25519ialah perintah yang betul untuk kekunci baharu. - Gunakan port bukan lalai. Marginal; kebanyakannya mengurangkan bunyi log pengimbas.
- fail2ban atau sshguard — menyekat IP selepas percubaan gagal berulang.
- LHadkan akaun pengguna yang boleh SSH.
AllowUsers insshd_config. - Gunakan VPN atau Tailscale — jangan dedahkan SSH kepada Internet awam sama sekali jika anda boleh mengelakkannya.
- Audit hos_ketahuan dan kunci_berkuasa. keluarkan kekunci untuk pengguna keluar; semak entri yang tidak dijangka.
Soalan lazim
- Apakah port yang digunakan oleh SSH?
- 22 secara lalai. Port boleh dikonfigurasikan; sesetengah pengendali mengalihkan SSH ke port bukan standard untuk mengurangkan trafik imbasan dalam log. Ini adalah keselamatan melalui ketidakjelasan — berguna untuk kebersihan, bukan untuk keselamatan sebenar. Keselamatan sebenar ialah pengesahan yang kukuh.
- Adakah SSH lebih selamat daripada HTTPS?
- Model ancaman yang berbeza. Kedua-duanya menggunakan kriptografi moden dan pada asasnya adalah sama selamat di peringkat protokol. SSH biasanya digunakan dengan pengesahan kunci awam (tiada kata laluan, sangat kuat) manakala banyak tapak HTTPS masih menggunakan pengesahan kata laluan (lebih lemah secara lalai). Protokol adalah rakan sebaya; amalan penempatan berbeza-beza.
- Bolehkah saya menggunakan SSH untuk pemindahan fail?
- ya. <code>scp</code> dan <code>sftp</code> kedua-duanya dijalankan di atas SSH. SFTP ialah pilihan moden yang lebih berkebolehan — pemindahan boleh disambung semula, operasi rekursif, penulisan atom. <code>rsync</code> juga boleh menggunakan SSH sebagai pengangkutannya, dan merupakan alat yang sesuai untuk sebarang pemindahan bukan remeh.
- Apakah kunci SSH?
- Pasangan kunci awam/peribadi yang digunakan untuk pengesahan. Kunci persendirian hidup dalam <code>~/.ssh/id_*</code> pada mesin anda; kunci awam dipasang dalam <code>~/.ssh/authorized_keys</code> pada pelayan yang anda sambungkan. Kehilangan kunci persendirian tanpa frasa laluan adalah masalah yang serius — sesiapa sahaja yang memilikinya boleh log masuk sebagai anda. Sentiasa lindungi kunci SSH dengan frasa laluan.
- Mengapa SSH mengatakan 'kunci hos berubah'?
- Kunci identiti pelayan berubah sejak sambungan terakhir anda — sama ada pelayan telah dibina semula, kunci telah diputar atau ada sesuatu yang tidak kena (kes yang paling membimbangkan: seseorang menyamar sebagai pelayan). Jangan terima kunci baru secara membuta tuli; sahkan di luar jalur dengan pengendali pelayan. Jika ia adalah putaran yang sah, alih keluar kunci lama daripada known_hosts dan terima yang baharu.