Documentation for a newer release is available. View Latest

OpenSSH

SSH (Secure Shell) adalah protokol yang memfasilitasi komunikasi yang aman antara dua sistem menggunakan arsitektur client-server dan memungkinkan pengguna untuk masuk ke sistem host server dari jarak jauh. Tidak seperti protokol komunikasi jarak jauh lainnya, seperti FTP, Telnet, atau rlogin, SSH mengenkripsi sesi login, membuat koneksi sulit bagi penyusup untuk mengumpulkan kata sandi yang tidak terenkripsi.

Program ssh dirancang untuk menggantikan aplikasi terminal yang lebih tua dan kurang aman yang digunakan untuk masuk ke host jarak jauh, seperti telnet atau rsh. Program terkait yang disebut scp menggantikan program lama yang dirancang untuk menyalin berkas antar host, seperti rcp. Karena aplikasi lama ini tidak mengenkripsi kata sandi yang dikirimkan antara klien dan server, hindari bila memungkinkan. Menggunakan metode aman untuk masuk ke sistem jarak jauh mengurangi risiko untuk sistem klien dan host jarak jauh.

Fedora termasuk paket OpenSSH umum, openssh, serta server OpenSSH, openssh-server, dan klien, openssh-clients. Perhatikan, paket OpenSSH memerlukan paket OpenSSL openssl-libs, yang memasang beberapa pustaka kriptografi penting, memungkinkan OpenSSH untuk menyediakan komunikasi terenkripsi.

Protokol SSH

Mengapa menggunakan SSH?

Penyusup potensial memiliki berbagai alat yang memungkinkan mereka untuk memutus, mengintersepsi, dan membelokkan lalu lintas jaringan dalam upaya untuk mendapatkan akses ke sistem. Secara umum, ancaman ini dapat dikategorikan sebagai berikut:

Intersepsi komunikasi antara dua sistem

Penyerang dapat berada di suatu tempat di jaringan antara pihak-pihak yang berkomunikasi, menyalin informasi apa pun yang diteruskan di antara mereka. Dia dapat mengintersepsi dan menyimpan informasi, atau mengubah informasi dan mengirimkannya ke penerima yang dituju.

Serangan ini biasanya dilakukan dengan menggunakan packet sniffer, utilitas jaringan yang cukup umum yang menangkap setiap paket yang mengalir melalui jaringan, dan menganalisis isinya.

Peniruan host tertentu

Sistem penyerang dikonfigurasi untuk berpose sebagai penerima transmisi yang dimaksud. Jika strategi ini berhasil, sistem pengguna tetap tidak menyadari bahwa ia berkomunikasi dengan host yang salah.

Serangan ini dapat dilakukan dengan menggunakan teknik yang dikenal sebagai DNS poisoning, atau melalui apa yang disebut IP spoofing. Dalam kasus pertama, penyusup menggunakan server DNS yang retak untuk mengarahkan sistem klien ke host yang diduplikasi dengan maksud jahat. Dalam kasus kedua, penyusup mengirimkan paket jaringan palsu yang tampaknya berasal dari host tepercaya.

Kedua teknik mencegat informasi yang berpotensi sensitif dan, jika intersepsi dibuat karena alasan bermusuhan, hasilnya bisa menjadi bencana. Jika SSH digunakan untuk login shell jarak jauh dan penyalinan berkas, ancaman keamanan ini dapat sangat berkurang. Ini karena klien dan server SSH menggunakan tanda tangan digital untuk memverifikasi identitas mereka. Selain itu, semua komunikasi antara klien dan sistem server dienkripsi. Upaya untuk menipu identitas kedua sisi komunikasi tidak berhasil, karena setiap paket dienkripsi menggunakan kunci yang hanya diketahui oleh sistem lokal dan jarak jauh.

Fitur Utama

Protokol SSH menyediakan perlindungan berikut:

Tidak ada yang bisa berpose sebagai server yang dituju

Setelah koneksi awal, klien dapat memverifikasi bahwa ia terhubung ke server yang sama dengan yang telah terhubung dengan sebelumnya.

Tidak ada yang bisa menangkap informasi otentikasi

Klien mengirimkan informasi otentikasi ke server menggunakan enkripsi yang kuat.

Tidak ada yang bisa mencegat komunikasi

Semua data yang dikirim dan diterima selama sesi ditransfer menggunakan enkripsi yang kuat, membuat transmisi yang dicegat sangat sulit untuk didekripsi dan dibaca.

Selain itu, ia juga menawarkan opsi berikut:

Ini menyediakan cara yang aman untuk menggunakan aplikasi grafis melalui jaringan

Dengan menggunakan teknik yang disebut X11 forwarding, klien dapat meneruskan aplikasi X11 (X Window System) dari server. Perhatikan bahwa jika Anda mengatur opsi ForwardX11Trusted ke yes atau Anda menggunakan SSH dengan opsi -Y, Anda melewati kontrol ekstensi KEAMANAN X11, yang dapat mengakibatkan ancaman keamanan.

Ini menyediakan cara untuk mengamankan protokol yang tidak aman

Protokol SSH mengenkripsi semua yang dikirim dan diterimanya. Menggunakan teknik yang disebut port forwarding, server SSH dapat menjadi saluran untuk mengamankan protokol yang tidak aman, seperti POP, dan meningkatkan sistem dan keamanan data secara keseluruhan.

Ini dapat digunakan untuk membuat saluran yang aman

Server dan klien OpenSSH dapat dikonfigurasi untuk membuat terowongan yang mirip dengan jaringan pribadi virtual untuk lalu lintas antara mesin server dan klien.

Mendukung otentikasi Kerberos

Server dan klien OpenSSH dapat dikonfigurasi untuk mengautentikasi menggunakan implementasi GSSAPI (Generic Security Services Application Program Interface) dari protokol otentikasi jaringan Kerberos.

Versi Protokol

indexterm:protokol SSH,versi 2] Dua varietas SSH saat ini ada: versi 1 dan versi 2. Keluarga OpenSSH di bawah Fedora menggunakan SSH versi 2, yang memiliki algoritma pertukaran kunci yang disempurnakan yang tidak rentan terhadap eksploitasi yang diketahui di versi 1. Protokol versi 1 telah dihapus dari keluarga OpenSSH dan tidak lagi didukung.

Urutan Peristiwa dari suatu Koneksi SSH

Rangkaian peristiwa berikut ini membantu melindungi integritas komunikasi SSH antara dua host.

  1. Jabat tangan kriptografi dibuat sehingga klien dapat memverifikasi bahwa ia berkomunikasi dengan server yang benar.

  2. Lapisan transport koneksi antara klien dan host jarak jauh dienkripsi menggunakan cipher simetris.

  3. Klien mengautentikasi dirinya ke server.

  4. Klien berinteraksi dengan host jarak jauh melalui koneksi terenkripsi.

Lapisan Transport

Peran utama dari lapisan transport adalah untuk memfasilitasi komunikasi yang aman (safe) dan aman (secure) antara dua host pada saat otentikasi dan selama komunikasi berikutnya. Lapisan transport menyelesaikan ini dengan menangani enkripsi dan dekripsi data, dan dengan memberikan perlindungan integritas paket data saat dikirim dan diterima. Lapisan transport juga menyediakan kompresi, mempercepat transfer informasi.

Setelah klien SSH menghubungi server, informasi kunci dipertukarkan sehingga kedua sistem dapat membangun lapisan transport dengan benar. Langkah-langkah berikut terjadi selama pertukaran ini:

  • Algoritma pertukaran kunci ditentukan

  • Algoritma tanda tangan kunci publik ditentukan

  • Algoritma enkripsi simetris ditentukan

  • Algoritma otentikasi pesan ditentukan

  • Kunci dipertukarkan

Selama pertukaran kunci, server mengidentifikasi dirinya kepada klien dengan host key yang unik. Jika klien belum pernah berkomunikasi dengan server ini sebelumnya, kunci host server tidak diketahui oleh klien dan itu tidak menyambung. OpenSSH memberi tahu pengguna bahwa keaslian host tidak dapat ditetapkan dan meminta pengguna untuk menerima atau menolaknya. Pengguna diharapkan untuk secara independen memverifikasi kunci host baru sebelum menerimanya. Dalam koneksi berikutnya, kunci host server diperiksa terhadap versi yang disimpan pada klien, memberikan keyakinan bahwa klien memang berkomunikasi dengan server yang dituju. Jika, di masa depan, kunci host tidak lagi cocok, pengguna harus menghapus versi klien yang disimpan sebelum koneksi dapat terjadi.

Selalu verifikasi integritas server SSH baru

Adalah mungkin bagi penyerang untuk menyamar sebagai server SSH selama kontak awal karena sistem lokal tidak tahu perbedaan antara server yang dituju dan yang palsu yang dibuat oleh penyerang. Untuk membantu mencegah hal ini, verifikasikan integritas server SSH baru dengan menghubungi administrator server sebelum terhubung untuk pertama kalinya atau jika terjadi ketidakcocokan kunci host.

SSH dirancang untuk bekerja dengan hampir semua jenis algoritma kunci publik atau format pengkodean. Setelah pertukaran kunci awal menciptakan nilai hash yang digunakan untuk pertukaran dan nilai rahasia bersama, kedua sistem segera mulai menghitung kunci dan algoritma baru untuk melindungi otentikasi dan data masa depan yang dikirim melalui koneksi.

Setelah sejumlah data telah ditransmisikan menggunakan kunci dan algoritma tertentu (seberapa banyak tepatnya tergantung pada implementasi SSH, algoritma enkripsi, dan konfigurasi), pertukaran kunci lain terjadi, menghasilkan satu set nilai hash dan nilai rahasia bersama baru. Bahkan jika penyerang dapat menentukan hash dan nilai rahasia bersama, informasi ini hanya berguna untuk jangka waktu terbatas.

Otentikasi

Setelah lapisan transport telah membangun terowongan yang aman untuk menyampaikan informasi antara dua sistem, server memberi tahu klien metode otentikasi yang berbeda yang didukung, seperti menggunakan tanda tangan yang dikodekan kunci pribadi atau mengetik kata sandi. Klien kemudian mencoba untuk mengotentikasi dirinya ke server menggunakan salah satu metode yang didukung ini.

Server dan klien SSH dapat dikonfigurasi untuk memungkinkan berbagai jenis otentikasi, yang memberi masing-masing pihak jumlah kontrol yang optimal. Server dapat memutuskan metode enkripsi mana yang didukungnya berdasarkan model keamanannya, dan klien dapat memilih urutan metode otentikasi untuk dicoba dari opsi yang tersedia.

Kanal

Setelah otentikasi yang berhasil melalui lapisan transport SSH, beberapa saluran dibuka melalui teknik yang disebut multiplexing[1]. Masing-masing kanal ini menangani komunikasi untuk sesi terminal yang berbeda dan untuk sesi X11 yang diteruskan.

Baik klien dan server dapat membuat kanal baru. Setiap kanal kemudian diberi nomor yang berbeda di setiap ujung koneksi. Ketika klien mencoba untuk membuka kanal baru, klien mengirimkan nomor kanal bersama dengan permintaan. Informasi ini disimpan oleh server dan digunakan untuk mengarahkan komunikasi ke kanal tersebut. Hal ini dilakukan agar berbagai jenis sesi tidak saling mempengaruhi dan sehingga ketika sesi tertentu berakhir, kanalnya dapat ditutup tanpa mengganggu koneksi SSH primer.

Kanal juga mendukung flow-control, yang memungkinkan mereka untuk mengirim dan menerima data secara teratur. Dengan cara ini, data tidak dikirim melalui kanal sampai klien menerima pesan bahwa kanal terbuka.

Klien dan server menegosiasikan karakteristik masing-masing kanal secara otomatis, tergantung pada jenis layanan yang diminta klien dan cara pengguna terhubung ke jaringan. Hal ini memungkinkan fleksibilitas besar dalam menangani berbagai jenis koneksi jarak jauh tanpa harus mengubah infrastruktur dasar protokol.

Mengonfigurasi OpenSSH

Untuk melakukan tugas-tugas yang dijelaskan di bagian ini, Anda harus memiliki hak istimewa superuser. Untuk mendapatkannya, masuk sebagai root dengan mengetik:

su -

Berkas Konfigurasi

Ada dua set berkas konfigurasi yang berbeda: untuk program klien (yaitu, ssh, scp, dan sftp), dan untuk server (daemon sshd). Informasi konfigurasi SSH seluruh sistem disimpan dalam direktori /etc/ssh/ seperti yang dijelaskan dalam Berkas konfigurasi seluruh sistem. Informasi konfigurasi SSH khusus pengguna disimpan dalam ~/.ssh/ dalam direktori rumah pengguna seperti yang dijelaskan dalam Berkas konfigurasi spesifik pengguna.

Tabel 1. Berkas konfigurasi seluruh sistem
Berkas Deskripsi

/etc/ssh/moduli

Memuat grup Diffie-Hellman yang dipakai untuk metode pertukaran kunci "Diffie-Hellman group exchange", yang kritis untuk mengonstruksi suatu lapisan transportasi yang aman. Ketika kunci-kunci dipertukarkan di awal dari suatu sesi SSH, sebuah nilai rahasia yang dipakai bersama dibuat yang tidak dapat ditentukan oleh salah satu pihak sendiri. Bila berkas tidak tersedia, suatu grup tetap akan dipakai. Metode pertukaran kunci lain tidak memerlukan berkas ini.

/etc/ssh/ssh_config

Berkas konfigurasi klien SSH baku. Perhatikan bahwa itu ditimpa oleh ~/.ssh/config bila itu ada.

/etc/ssh/sshd_config

Berkas konfigurasi bagi daemon sshd.

/etc/ssh/ssh_host_ecdsa_key

Kunci privat ECDSA yang dipakai oleh daemon sshd.

/etc/ssh/ssh_host_ecdsa_key.pub

Kunci publik ECDSA yang dipakai oleh daemon sshd.

/etc/ssh/ssh_host_rsa_key

Kunci privat RSA yang dipakai oleh daemon sshd.

/etc/ssh/ssh_host_rsa_key.pub

Kunci publik RSA yang dipakai oleh daemon sshd.

/etc/ssh/ssh_host_ed25519_key

Kunci privat EdDSA yang dipakai oleh daemon sshd.

/etc/ssh/ssh_host_ed25519_key.pub

Kunci publik EdDSA yang dipakai oleh daemon sshd.

/etc/pam.d/sshd

Berkas konfigurasi PAM bagi daemon sshd.

/etc/sysconfig/sshd

Berkas konfigurasi bagi layanan sshd.

Tabel 2. Berkas konfigurasi spesifik pengguna
Berkas Deskripsi

~/.ssh/authorized_keys

Menampung daftar kunci publik resmi untuk server. Ketika klien terhubung ke server, server mengautentikasi klien dengan memeriksa kunci publik yang ditandatangani yang disimpan dalam berkas ini.

~/.ssh/id_ecdsa

Berisi kunci pribadi ECDSA pengguna.

~/.ssh/id_ecdsa.pub

Kunci publik ECDSA dari pengguna.

~/.ssh/id_rsa

Kunci pribadi RSA yang digunakan oleh ssh.

~/.ssh/id_rsa.pub

Kunci publik RSA yang digunakan oleh ssh.

~/.ssh/id_ed25519

Kunci pribadi EdDSA yang digunakan oleh ssh.

~/.ssh/id_ed25519.pub

Kunci publik EdDSA yang digunakan oleh ssh.

~/.ssh/known_hosts

Berisi kunci host server SSH yang diakses oleh pengguna. Berkas ini sangat penting untuk memastikan bahwa klien SSH terhubung ke server SSH yang benar.

Untuk informasi mengenai berbagai direkti yang dapat digunakan dalam berkas konfigurasi SSH, lihat halaman manual ssh_config(5) dan sshd_config(5).

Memulai Server OpenSSH

Pastikan paket yang relevan telah terpasang

Untuk menjalankan server OpenSSH, Anda harus memasang paket openssh-server* Lihat Memasang Paket untuk informasi lebih lanjut tentang cara memasang paket baru di Fedora 34.

Untuk memulai daemon sshd di sesi saat ini, ketikkan yang berikut ini pada shell prompt sebagai root:

~]# systemctl start sshd.service

Untuk menghentikan daemon sshd yang sedang berjalan di sesi saat ini, gunakan perintah berikut sebagai root:

~]# systemctl stop sshd.service

Jika Anda ingin daemon dimulai secara otomatis pada saat boot, ketik sebagai root:

~]# systemctl enable sshd.service
ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'

Lihat Layanan dan Daemon untuk informasi selengkapnya tentang cara mengonfigurasi layanan di Fedora.

Perhatikan bahwa jika Anda memasang ulang sistem, satu set kunci identifikasi baru akan dibuat. Akibatnya, klien yang telah terhubung ke sistem dengan salah satu alat OpenSSH sebelum pemasangan ulang akan melihat pesan berikut:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.

Untuk mencegah hal ini, Anda dapat membuat cadangan berkas yang relevan dari direktori /etc/ssh/ (lihat Berkas konfigurasi seluruh sistem untuk daftar lengkap), dan memulihkannya setiap kali Anda memasang ulang sistem.

Mempersyaratkan SSH untuk Koneksi Jarak Jauh

Agar SSH benar-benar efektif, menggunakan protokol koneksi yang tidak aman harus dilarang. Jika tidak, kata sandi pengguna dapat dilindungi menggunakan SSH untuk satu sesi, hanya untuk ditangkap nanti saat masuk menggunakan Telnet. Beberapa layanan yang perlu dinonaktifkan termasuk telnet, rsh, rlogin, dan vsftpd.

Layanan ini tidak dipasang secara baku di Fedora. Jika diperlukan, untuk memastikan layanan ini tidak sedang berjalan, ketik perintah berikut pada shell prompt:

systemctl stop telnet.service
systemctl stop rsh.service
systemctl stop rlogin.service
systemctl stop vsftpd.service

Untuk menonaktifkan menjalankan layanan ini saat startup, ketik:

systemctl disable telnet.service
systemctl disable rsh.service
systemctl disable rlogin.service
systemctl disable vsftpd.service

Lihat Layanan dan Daemon untuk informasi selengkapnya tentang cara mengonfigurasi layanan di Fedora.

Menggunakan Otentikasi Berbasis Kunci

Untuk meningkatkan keamanan sistem lebih jauh, buat pasangan kunci SSH dan kemudian paksakan otentikasi berbasis kunci dengan menonaktifkan otentikasi kata sandi. Untuk melakukannya, buat berkas konfigurasi tambahan, misalnya /etc/ssh/sshd_config.d/01-local.conf. Pastikan itu secara leksiografi sebelum berkas 50-redhat.conf, yang menyediakan baku Fedora. Dalam penyunting teks seperti vi atau nano masukkan opsi PasswordAuthentication sebagai berikut:

PasswordAuthentication no

Jika Anda sedang mengerjakan sistem selain instalasi baku baru, periksa apakah PubkeyAuthentication no tidak ditetapkan baik dalam /etc/ssh/sshd_config atau berkas yang disertakan dari direktori drop-in. Jika terhubung dari jarak jauh, tidak menggunakan konsol atau akses out-of-band, disarankan untuk menguji proses log in berbasis kunci sebelum menonaktifkan autentikasi kata sandi.

Untuk dapat menggunakan ssh, scp, atau sftp untuk terhubung ke server dari mesin klien, hasilkan pasangan kunci otorisasi dengan mengikuti langkah-langkah di bawah ini. Perhatikan bahwa kunci harus dihasilkan untuk setiap pengguna secara terpisah.

Fedora 34 menggunakan SSH Protokol 2 dan kunci RSA secara baku (lihat Versi Protokol untuk informasi lebih lanjut).

Jangan membuat pasangan kunci sebagai root

Jika Anda menyelesaikan langkah-langkah sebagai root, hanya root yang dapat menggunakan kunci.

Cadangkan direktori ~/.ssh/ Anda

Jika Anda memasang ulang sistem Anda dan ingin mempertahankan pasangan kunci yang dihasilkan sebelumnya, cadangkan direktori ~/.ssh/. Setelah memasang ulang, salin kembali ke direktori rumah Anda. Proses ini dapat dilakukan untuk semua pengguna di sistem Anda, termasuk root.

Menghasilkan Pasangan Kunci

Untuk menghasilkan pasangan kunci RSA bagi protokol SSH versi 2, ikuti langkah-langkah ini:

  1. Hasilkan pasangan kunci RSA dengan mengetikkan yang berikut ini di shell prompt:

    ~]$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/USER/.ssh/id_rsa):
  2. Tekan Enter untuk mengonfirmasi lokasi baku, ~/.ssh/id_rsa, bagi kunci yang baru dibuat.

  3. Masukkan frasa sandi, dan konfirmasikan dengan memasukkannya lagi ketika diminta untuk melakukannya. Untuk alasan keamanan, hindari menggunakan kata sandi yang sama seperti yang Anda gunakan untuk masuk ke akun Anda.

    Setelah ini, Anda akan disajikan dengan pesan yang mirip dengan ini:

    Identifikasi Anda telah disimpan di /home/USER/.ssh/id_rsa.
    Kunci publik Anda telah disimpan di /home/USER/.ssh/id_rsa.pub.
    Kunci sidik jarinya adalah:
    SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0 USER@penguin.example.com
    Gambar randomart kuncinya adalah:
    +--[ RSA 2048]----+
    |             E.  |
    |            . .  |
    |             o . |
    |              . .|
    |        S .    . |
    |           + o ..|
    |          * * +oo|
    |          O +.. =|
    |            o* o.|
    +-----------------+
  4. Secara baku, izin direktori ~/.ssh/ diatur ke rwx------ atau 700 yang dinyatakan dalam notasi oktal. Ini untuk memastikan bahwa hanya USER yang dapat melihat konten. Jika diperlukan, ini dapat dikonfirmasi dengan perintah berikut:

    ~]$ ls -ld ~/.ssh
    drwx------. 2 USER USER 54 Nov 25 16:56 /home/USER/.ssh/
  5. Untuk menyalin kunci publik ke mesin jarak jauh, jalankan perintah dalam format berikut:

     ssh-copy-id pengguna@namahost

    Ini akan menyalin kunci publik ~/.ssh/id*.pub yang baru saja dimodifikasi jika belum terpasang. Atau, nyatakan nama berkas kunci publik sebagai berikut:

    ssh-copy-id -i ~/.ssh/id_rsa.pub pengguna@namahost

    Ini akan menyalin konten ~/.ssh/id_rsa.pub ke dalam berkas ~/.ssh/authorized_keys pada mesin yang ingin Anda hubungkan. Jika berkas sudah ada, kunci ditambahkan ke ujungnya.

Untuk menghasilkan pasangan kunci ECDSA bagi versi 2 dari protokol SSH, ikuti langkah-langkah berikut:

  1. Hasilkan pasangan kunci ECDSA dengan mengetikkan yang berikut ini di shell prompt:

    ~]$ ssh-keygen -t ecdsa
    Generating public/private ecdsa key pair.
    Enter file in which to save the key (/home/USER/.ssh/id_ecdsa):
  2. Tekan Enter untuk mengonfirmasi lokasi baku, ~/.ssh/id_ecdsa, bagi kunci yang baru dibuat.

  3. Masukkan frasa sandi, dan konfirmasikan dengan memasukkannya lagi ketika diminta untuk melakukannya. Untuk alasan keamanan, hindari menggunakan kata sandi yang sama seperti yang Anda gunakan untuk masuk ke akun Anda.

    Setelah ini, Anda akan disajikan dengan pesan yang mirip dengan ini:

    Identifikasi Anda telah disimpan di /home/USER/.ssh/id_ecdsa.
    Kunci publik Anda telah disimpan di /home/USER/.ssh/id_ecdsa.pub.
    Sidik jari kunci adalah:
    SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0 USER@penguin.example.com
    Gambar randomart kuncinya adalah:
    +--[ECDSA  256]---+
    |           .+ +o |
    |           . =.o |
    |           o + ..|
    |          + + o +|
    |        S o o oE.|
    |           + oo+.|
    |             + o |
    |                 |
    |                 |
    +-----------------+
  4. Secara baku, izin direktori ~/.ssh/ diatur ke rwx------ atau 700 yang dinyatakan dalam notasi oktal. Ini untuk memastikan bahwa hanya USER yang dapat melihat konten. Jika diperlukan, ini dapat dikonfirmasi dengan perintah berikut:

    ~]$ ls -ld ~/.ssh
                  ~]$ ls -ld ~/.ssh/
    drwx------. 2 USER USER 54 Nov 25 16:56 /home/USER/.ssh/
  5. Untuk menyalin kunci publik ke mesin jarak jauh, jalankan perintah dalam format berikut:

    ssh-copy-id USER@hostname

    Ini akan menyalin kunci publik ~/.ssh/id*.pub yang baru saja dimodifikasi jika belum terpasang. Atau, nyatakan nama berkas kunci publik sebagai berikut:

    ssh-copy-id -i ~/.ssh/id_ecdsa.pub USER@hostname

    Ini akan menyalin isi ~/.ssh/id_ecdsa.pub ke dalam ~/.ssh/authorized_keys pada mesin yang ingin Anda hubungi. Jika berkas sudah ada, kunci ditambahkan ke ujungnya.

Lihat Mengonfigurasi ssh-agent untuk informasi tentang cara mengatur sistem Anda agar mengingat frasa sandi.

Jangan pernah berbagi kunci privat Anda

Kunci privat hanya untuk penggunaan pribadi Anda, dan penting bagi Anda untuk tidak pernah memberikannya kepada siapa pun.

Mengonfigurasi ssh-agent

Untuk menyimpan frasa sandi Anda sehingga Anda tidak perlu memasukkannya setiap kali Anda memulai koneksi dengan mesin jarak jauh, Anda dapat menggunakan agen otentikasi ssh-agents.

Untuk menyimpan frasa sandi Anda bagi prompt shell tertentu, gunakan perintah berikut:

~]$ ssh-add
Enter passphrase for /home/USER/.ssh/id_rsa:

Perhatikan bahwa ketika Anda log keluar, frasa sandi Anda akan dilupakan. Anda harus menjalankan perintah tersebut setiap kali Anda masuk ke konsol virtual atau jendela terminal.

Menggunakan Autentikasi Sertifikat OpenSSH

Pengenalan ke Sertifikat SSH

Menggunakan kriptografi kunci publik untuk otentikasi memerlukan menyalin kunci publik dari setiap klien ke setiap server yang ingin dimasuki klien. Sistem ini tidak berskala baik dan bisa menjadi beban administrasi. Menggunakan kunci publik dari certificate authority (CA) untuk mengautentikasi sertifikat klien menghilangkan kebutuhan untuk menyalin kunci di antara beberapa sistem. Sementara sistem Sertifikat Infrastruktur Kunci Publik X.509 memberikan solusi untuk masalah ini, ada proses pengajuan dan validasi, dengan biaya terkait, yang harus dilalui untuk mendapatkan sertifikat yang ditandatangani. Sebagai alternatif, OpenSSH mendukung pembuatan sertifikat sederhana dan infrastruktur CA terkait.

Sertifikat OpenSSH berisi kunci publik, informasi identitas, dan kendala validitas. Mereka ditandatangani dengan kunci publik SSH standar menggunakan utilitas ssh-keygen. Format sertifikat dijelaskan dalam /usr/share/doc/openssh-version/PROTOCOL.certkeys.

Utilitas ssh-keygen mendukung dua jenis sertifikat: pengguna dan host. Sertifikat pengguna mengautentikasi pengguna ke server, sedangkan sertifikat host mengautentikasi host server kepada pengguna. Agar sertifikat digunakan untuk autentikasi pengguna atau host, sshd harus dikonfigurasi untuk mempercayai kunci publik CA.

Dukungan untuk Sertifikat SSH

Dukungan untuk otentikasi sertifikat pengguna dan host menggunakan format sertifikat OpenSSH diperkenalkan di Fedora 13, dalam paket openssh-5.4p1-1.fc13. Jika diperlukan, untuk memastikan paket OpenSSH terbaru terpasang, masukkan perintah berikut sebagai root:

~]# dnf install openssh
Last metadata expiration check performed 0:58:01 ago on Sun Sep  6 16:07:22 2020.
Package openssh-7.1p1-1.fc23.x86_64 is already installed, skipping.

Membuat Kunci Penandatanganan Sertifikat CA SSH

Dua jenis sertifikat diperlukan, sertifikat host dan sertifikat pengguna. Dianggap lebih baik untuk memiliki dua kunci terpisah untuk menandatangani dua sertifikat, misalnya ca_user_key dan ca_host_key, namun dimungkinkan untuk menggunakan hanya satu kunci CA untuk menandatangani kedua sertifikat. Juga lebih mudah untuk mengikuti prosedur jika kunci terpisah digunakan, sehingga contoh yang mengikuti akan menggunakan kunci terpisah.

Format dasar perintah untuk menandatangani kunci publik pengguna untuk membuat sertifikat pengguna adalah sebagai berikut:

ssh-keygen -s ca_user_key -I certificate_ID id_rsa.pub

Di mana -s menunjukkan kunci privat yang digunakan untuk menandatangani sertifikat, -I menunjukkan string identitas, certificate_ID, yang bisa berupa nilai alfanumerik apa pun. Ini disimpan sebagai string yang diterminasi nol dalam sertifikat. certificate_ID dicatat setiap kali sertifikat digunakan untuk identifikasi dan juga digunakan saat mencabut sertifikat. Memiliki nilai yang panjang akan membuat log sulit dibaca, oleh karena itu menggunakan nama host untuk sertifikat host dan nama pengguna untuk sertifikat pengguna adalah pilihan yang aman.

Untuk menandatangani kunci publik host untuk membuat sertifikat host, tambahkan opsi -h:

ssh-keygen -s ca_host_key -I certificate_ID -h ssh_host_rsa_key.pub

Kunci host dihasilkan pada sistem secara baku, untuk melihat daftar kunci, masukkan perintah sebagai berikut:

~]# ls -l /etc/ssh/ssh_host*
-rw-------. 1 root root  668 Jul  9  2014 /etc/ssh/ssh_host_dsa_key
-rw-r--r--. 1 root root  590 Jul  9  2014 /etc/ssh/ssh_host_dsa_key.pub
-rw-------. 1 root root  963 Jul  9  2014 /etc/ssh/ssh_host_key
-rw-r--r--. 1 root root  627 Jul  9  2014 /etc/ssh/ssh_host_key.pub
-rw-------. 1 root root 1671 Jul  9  2014 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root  382 Jul  9  2014 /etc/ssh/ssh_host_rsa_key.pub

Dianjurkan untuk membuat dan menyimpan kunci CA di tempat yang aman seperti halnya dengan kunci privat lainnya. Dalam contoh ini pengguna root akan dipakai. Dalam lingkungan produksi nyata dianjurkan menggunakan komputer luring dengan akun pengguna administratif. Untuk panduan tentang panjang kunci lihat NIST Special Publication 800-131A Revision 1.

Menghasilkan Kunci Penandatanganan Sertifikat CA SSH
  1. Pada server yang ditunjuk untuk menjadi CA, hasilkan dua kunci untuk digunakan dalam menandatangani sertifikat. Ini adalah kunci yang perlu dipercaya oleh semua host lain. Pilih nama yang cocok, misalnya ca_user_key dan ca_host_key. Untuk menghasilkan kunci penandatanganan sertifikat pengguna, masukkan perintah berikut sebagai root:

    ~]# ssh-keygen -t rsa -f ~/.ssh/ca_user_key
    Generating public/private rsa key pair.
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/ca_user_key.
    Your public key has been saved in /root/.ssh/ca_user_key.pub.
    The key fingerprint is:
    SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0 root@host_name.example.com
    The key's randomart image is:
    +--[ RSA 2048]----+
    |       .+.      o|
    |       . o     +.|
    |      o + .   . o|
    |       o + . . ..|
    |        S . ... *|
    |        . . . .*.|
    |         = E  .. |
    |        . o .    |
    |           .     |
    +-----------------+

    Buat kunci penandatanganan sertifikat host, ca_host_key, sebagai berikut:

    ~]# ssh-keygen -t rsa -f ~/.ssh/ca_host_key
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/ca_host_key.
    Your public key has been saved in /root/.ssh/ca_host_key.pub.
    The key fingerprint is:
    SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0 root@host_name.example.com
    The key's randomart image is:
    +--[ RSA 2048]----+
    |            ..   |
    |           . ....|
    |        . . o +oo|
    |       o .   o *o|
    |        S     = .|
    |             o. .|
    |            *.E. |
    |           +o=   |
    |          .oo.   |
    +-----------------+

    Jika diperlukan, konfirmasikan izinnya benar:

    ~]# ls -la ~/.ssh
    total 40
    drwxrwxrwx. 2 root root 4096 May 22 13:18 .
    dr-xr-x---. 3 root root 4096 May  8 08:34 ..
    -rw-------. 1 root root 1743 May 22 13:15 ca_host_key
    -rw-r--r--. 1 root root  420 May 22 13:15 ca_host_key.pub
    -rw-------. 1 root root 1743 May 22 13:14 ca_user_key
    -rw-r--r--. 1 root root  420 May 22 13:14 ca_user_key.pub
    -rw-r--r--. 1 root root  854 May  8 05:55 known_hosts
    -r--------. 1 root root 1671 May  6 17:13 ssh_host_rsa
    -rw-r--r--. 1 root root 1370 May  7 14:30 ssh_host_rsa-cert.pub
    -rw-------. 1 root root  420 May  6 17:13 ssh_host_rsa.pub
  2. Buat sertifikat host server CA sendiri dengan menandatangani kunci publik host server bersama dengan string identifikasi seperti nama host, fully qualified domain name (FQDN) server CA tetapi tanpa ekor ., dan masa berlaku. Perintah mengambil bentuk berikut:

    ssh-keygen -s ~/.ssh/ca_host_key -I certificate_ID -h -n host_name.example.com -V -start:+end /etc/ssh/ssh_host_rsa.pub

    Opsi -n membatasi sertifikat ini ke host tertentu dalam domain. Opsi -V adalah untuk menambahkan masa berlaku; ini sangat direkomendasikan. Jika masa berlaku dimaksudkan untuk menjadi satu tahun, lima puluh dua minggu, pertimbangkan perlunya waktu untuk mengubah sertifikat dan periode liburan sekitar waktu berakhirnya sertifikat.

    Sebagai contoh:

    ~]# ssh-keygen -s ~/.ssh/ca_host_key -I host_name -h -n host_name.example.com -V -1w:+54w5d /etc/ssh/ssh_host_rsa.pub
    Enter passphrase:
    Signed host key /root/.ssh/ssh_host_rsa-cert.pub: id "host_name" serial 0 for host_name.example.com valid from 2020-05-15T13:52:29 to 2021-06-08T13:52:29

Mendistribusikan dan Mempercayai Kunci Publik CA SSH

Host yang mengizinkan masuk log yang diautentikasi sertifikat dari pengguna harus dikonfigurasi untuk mempercayai kunci publik CA yang dipakai untuk menandatangani sertifikat pengguna, untuk mengautentikasi sertifikat pengguna. Dalam contoh ini adalah ca_user_key.pub.

Publikasikan kunci ca_user_key.pub dan unduh ke semua host yang diperlukan untuk memungkinkan pengguna jarak jauh masuk. Sebagai alternatif, salin kunci publik pengguna CA ke semua host. Dalam lingkungan produksi, pertimbangkan untuk menyalin kunci publik ke akun administrator terlebih dahulu. Perintah salinan aman dapat digunakan untuk menyalin kunci publik ke host jarak jauh. Perintah memiliki format berikut:

scp  ~/.ssh/ca_user_key.pub root@host_name.example.com:/etc/ssh/

Di mana host_name adalah nama host server, diperlukan untuk mengautentikasi sertifikat pengguna yang disajikan selama proses login. Pastikan Anda menyalin kunci publik bukan kunci pribadi. Misalnya, sebagai root:

~]# scp ~/.ssh/ca_user_key.pub root@host_name.example.com:/etc/ssh/
The authenticity of host 'host_name.example.com (10.34.74.56)' can't be established.
ECDSA key fingerprint is SHA256:ZYEUaevOAEASvYjm58PiPdMebxhhlaTZBjTMr/N2I3c.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'host_name.example.com,10.34.74.56' (ECDSA) to the list of known hosts.
root@host_name.example.com's password:
ca_user_key.pub                                       100%  420     0.4KB/s   00:00

Untuk otentikasi pengguna jarak jauh, kunci CA dapat ditandai sebagai terpercaya per pengguna dalam berkas ~/.ssh/authorized_keys memakai arahan cert-authority atau untuk penggunaan global melalui arahan TrustedUserCAKeys dalam berkas /etc/ssh/sshd_config. Untuk autentikasi host jarak jauh, kunci CA dapat ditandai sebagai terpercaya secara global dalam berkas /etc/ssh/known_hosts atau per pengguna dalam berkas ~/.ssh/ssh_known_hosts.

Mempercayai Kunci Penandatanganan Pengguna
  1. Untuk sertifikat pengguna yang memiliki satu atau lebih prinsipal yang tercantum, dan di mana pengaturannya memiliki efek global, sunting berkas /etc/ssh/sshd_config sebagai berikut:

    TrustedUserCAKeys /etc/ssh/ca_user_key.pub

    Jalankan ulang sshd untuk membuat perubahan berlaku:

    ~]#{nbsp}systemctl restart sshd.service

Untuk menghindari diberi peringatan tentang host yang tidak dikenal, sistem pengguna harus mempercayai kunci publik CA yang dipakai untuk menandatangani sertifikat host. Dalam contoh ini yaitu ca_host_key.pub.

Mempercayai Kunci Penandatanganan Host
  1. Ekstrak isi kunci publik yang digunakan untuk menandatangani sertifikat host. Misalnya, pada CA:

    cat ~/.ssh/ca_host_key.pub
    ssh-rsa  AAAAB5Wm.== root@ca-server.example.com
  2. Untuk mengonfigurasi sistem klien agar mempercayai sertifikat host yang ditandatangani server, tambahkan isi ca_host_key.pub ke dalam berkas known_hosts global. Ini akan secara otomatis memeriksa host server yang diiklankan sertifikat terhadap kunci publik CA untuk semua pengguna setiap kali mesin baru terhubung ke dalam domain *.example.com. Log masuk sebagai root dan konfigurasikan berkas /etc/ssh/ssh_known_hosts, sebagai berikut:

    ~]# vi /etc/ssh/ssh_known_hosts
    # A CA key, accepted for any host in *.example.com
    @cert-authority *.example.com ssh-rsa AAAAB5Wm.

    Di mana ssh-rsa AAAAB5Wm. adalah isi dari ca_host_key.pub. Hal di atas mengkonfigurasi sistem untuk mempercayai kunci publik host server CA. Ini memungkinkan otentikasi global dari sertifikat yang disajikan oleh host untuk pengguna jarak jauh.

Membuat Sertifikat SSH

Sebuah sertifikasi adalah kunci publik yang ditandatangani. Kunci publik pengguna dan host harus disalin ke server CA untuk ditandatangani oleh kunci privat server CA.

Menyalin banyak kunci yang akan ditandatangani ke CA dapat membuat kebingungan jika tidak diberi nama unik. Jika nama baku selalu digunakan maka kunci terbaru yang akan disalin akan menimpa kunci yang disalin sebelumnya, yang mungkin merupakan metode yang dapat diterima untuk satu administrator. Pada contoh di bawah ini nama baku digunakan. Dalam lingkungan produksi, pertimbangkan untuk menggunakan nama yang mudah dikenali. Disarankan untuk memiliki direktori yang ditunjuk pada server CA yang dimiliki oleh pengguna administratif untuk tempat kunci disalin. Menyalin kunci ini ke direktori root pengguna /etc/ssh/ tidak direkomendasikan. Dalam contoh di bawah ini akun bernama admin dengan direktori bernama keys/ akan digunakan.

Buat akun administrator, dalam contoh ini admin, dan suatu direktori untuk menerima kunci pengguna. Misalnya:

~]$ mkdir keys

Atur izin untuk memperbolehkan kunci disalin masuk:

~]$ chmod o+w keys
ls -la keys
total 8
drwxrwxrwx. 2 admin admin 4096 May 22 16:17 .
drwx------. 3 admin admin 4096 May 22 16:17 ..

Membuat Sertifikat SSH untuk Mengautentikasi Host

Perintah untuk menandatangani sertifikat host memiliki format berikut:

ssh-keygen -s ca_host_key -I host_name -h ssh_host_rsa_key.pub

Sertifikat host akan diberi nama ssh_host_rsa_key-cert.pub.

Menghasilkan Sertifikat Host

Untuk mengautentikasi host ke pengguna, kunci publik harus dihasilkan pada host, diteruskan ke server CA, ditandatangani oleh CA, dan kemudian dikembalikan untuk disimpan di host untuk disajikan kepada pengguna yang mencoba masuk ke host.

  1. Kunci host dihasilkan secara otomatis pada sistem. Untuk melihat daftarnya masukkan perintah berikut:

    ~]# ls -l /etc/ssh/ssh_host*
    -rw-------. 1 root root  668 May  6 14:38 /etc/ssh/ssh_host_dsa_key
    -rw-r--r--. 1 root root  590 May  6 14:38 /etc/ssh/ssh_host_dsa_key.pub
    -rw-------. 1 root root  963 May  6 14:38 /etc/ssh/ssh_host_key
    -rw-r--r--. 1 root root  627 May  6 14:38 /etc/ssh/ssh_host_key.pub
    -rw-------. 1 root root 1679 May  6 14:38 /etc/ssh/ssh_host_rsa_key
    -rw-r--r--. 1 root root  382 May  6 14:38 /etc/ssh/ssh_host_rsa_key.pub
  2. Salin kunci publik yang dipilih ke server yang ditunjuk sebagai CA. Misalnya, dari host:

    ~]# scp /etc/ssh/ssh_host_rsa_key.pub admin@ca-server.example.com:~/keys/ssh_host_rsa_key.pub
    The authenticity of host 'ca-server.example.com (10.34.74.58)' can't be established.
    ECDSA key fingerprint is SHA256:ZYEUaevOAEASvYjm58PiPdMebxhhlaTZBjTMr/N2I3c.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added 'ca-server.example.com,10.34.74.58' (RSA) to the list of known hosts.
    admin@ca-server.example.com's password:
    ssh_host_rsa_key.pub                           100%  382     0.4KB/s   00:00

    Sebagai alternatif, dari CA:

    ~]$ scp  root@host_name.example.com:/etc/ssh/ssh_host_rsa_key.pub ~/keys/ssh_host_rsa_key.pub
  3. Di server CA, tandatangani kunci publik host. Misalnya, sebagai root:

    ~]# ssh-keygen -s ~/.ssh/ca_host_key -I host_name -h -n host_name.example.com -V -1d:+54w /home/admin/keys/ssh_host_rsa_key.pub
    Enter passphrase:
    Signed host key /home/admin/keys/ssh_host_rsa_key-cert.pub: id "host_name" serial 0 for host_name.example.com valid from 2020-05-26T12:21:54 to 2021-06-08T12:21:54

    Di mana host_name adalah nama host dari sistem yang membutuhkan sertifikat.

  4. Salin sertifikat ke host. Misalnya, dari CA:

    ~]# scp /home/admin/keys/ssh_host_rsa_key-cert.pub root@host_name.example.com:/etc/ssh/
    root@host_name.example.com's password:
    ssh_host_rsa_key-cert.pub                      100% 1384     1.5KB/s   00:00
  5. Konfigurasikan host untuk menyajikan sertifikat ke sistem pengguna saat pengguna memulai proses login. Sebagai root, sunting berkas /etc/ssh/sshd_config sebagai berikut:

    HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
  6. Jalankan ulang sshd untuk membuat perubahan berlaku:

    ~]#{nbsp}systemctl restart sshd.service
  7. Pada sistem pengguna. hapus kunci milik host dari berkas ~/.ssh/known_hosts jika pengguna sebelumnya telah masuk ke host yang dikonfigurasi di atas. Ketika pengguna masuk ke host, mereka seharusnya tidak lagi disajikan dengan peringatan tentang keaslian host.

Untuk menguji sertifikat host, pada sistem klien, pastikan klien telah menyiapkan berkas global /etc/ssh/known_hosts, seperti yang dijelaskan dalam Mempercayai Kunci Penandatanganan Host, dan bahwa kunci publik server tidak ada dalam berkas ~/.ssh/known_hosts. Kemudian cobalah untuk masuk ke server melalui SSH sebagai pengguna jarak jauh. Anda seharusnya tidak melihat peringatan tentang keautentikan tuan rumah. Jika diperlukan, tambahkan opsi -v ke perintah SSH untuk melihat informasi pencatatan.

Membuat Sertifikat SSH untuk Mengautentikasi Pengguna

Untuk menandatangani sertifikat pengguna, gunakan perintah dalam format berikut:

ssh-keygen -s ca_user_key -I user_name -n user_name -V -start:+end id_rsa.pub

Sertifikat yang dihasilkan akan diberi nama id_rsa-cert.pub.

Perilaku baku OpenSSH adalah bahwa pengguna diizinkan untuk masuk sebagai pengguna jarak jauh jika salah satu prinsipal yang ditentukan dalam sertifikat cocok dengan nama pengguna jarak jauh. Hal ini dapat disesuaikan dengan cara berikut:

  • Tambahkan lebih banyak nama pengguna ke sertifikat selama proses penandatanganan menggunakan opsi -n:

    -n "name1[,name2,...]"
  • Pada sistem pengguna, tambahkan kunci publik CA dalam berkas ~/.ssh/authorized_keys menggunakan arahan cert-authority dan daftarkan nama-nama principal sebagai berikut:

    ~]# vi ~/.ssh/authorized_keys
    # A CA key, accepted for any host in *.example.com
    @cert-authority principals="name1,name2" *.example.com ssh-rsa AAAAB5Wm.
  • Di server, buat berkas AuthorizedPrincipalsFile, baik per pengguna atau secara global, dan tambahkan nama prinsipal ke berkas untuk pengguna yang diizinkan masuk. Kemudian di berkas /etc/ssh/sshd_config, tentukan berkas menggunakan direktif AuthorizedPrincipalsFile.

Membuat Sertifikat Pengguna

Untuk mengautentikasi pengguna ke host jarak jauh, kunci publik harus dihasilkan oleh pengguna, diteruskan ke server CA, ditandatangani oleh CA, dan kemudian dikembalikan agar disimpan oleh pengguna untuk digunakan saat masuk ke host.

  1. Pada sistem klien, login sebagai pengguna yang membutuhkan sertifikat. Periksa kunci yang tersedia sebagai berikut:

    ~]$ ls -l ~/.ssh/

    Jika tidak ada kunci publik yang sesuai, buat satu dan atur izin direktori jika direktori bukan direktori baku. Misalnya, masukkan perintah berikut:

    ~]$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/user1/.ssh/id_rsa):
    Created directory '/home/user1/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/user1/.ssh/id_rsa.
    Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0 user1@host1.example.com
    The key's randomart image is:
    +--[ RSA 2048]----+
    |    oo++.        |
    |   o.o.o.        |
    |   .o o .        |
    |    oo . o       |
    |   . oo.S        |
    |     o=..        |
    |     .Eo+        |
    |      .=         |
    |     ..          |
    +-----------------+

    Secara baku izin direktori untuk kunci pengguna adalah drwx------., atau oktal 0700. Jika diperlukan, konfirmasikan izinnya benar:

    ~]$ ls -la ~/.ssh
    total 16
    drwx------. 2 user1 user1 4096 May  7 12:37 .
    drwx------. 3 user1 user1 4096 May  7 12:37 ..
    -rw-------. 1 user1 user1 1679 May  7 12:37 id_rsa
    -rw-r--r--. 1 user1 user1  421 May  7 12:37 id_rsa.pub

    Lihat Menggunakan Otentikasi Berbasis Kunci untuk contoh lebih lanjut dari pembuatan kunci dan untuk instruksi tentang pengaturan izin direktori yang benar.

  2. Kunci publik yang dipilih harus disalin ke server yang ditunjuk sebagai CA, agar dapat ditandatangani. Perintah salin aman dapat digunakan untuk melakukan ini, perintah memiliki format berikut:

    scp  ~/.ssh/id_protocol.pub admin@ca_server.example.com:~/keys/

    Di mana protocol adalah bagian dari nama berkas yang menunjukkan protokol yang digunakan untuk menghasilkan kunci, misalnya rsa, admin adalah akun di server CA, dan /keys/ adalah penyiapan direktori untuk menerima kunci yang akan ditandatangani.

    Salin kunci publik yang dipilih ke server yang ditunjuk sebagai CA. Misalnya:

    ~]$ scp ~/.ssh/id_rsa.pub admin@ca-server.example.com:~/keys/
    admin@ca-server.example.com's password:
    id_rsa.pub                                  100%  421     0.4KB/s   00:00

    Jika Anda telah mengonfigurasi sistem klien untuk mempercayai kunci penandatanganan host seperti yang dijelaskan dalam Mempercayai Kunci Penandatanganan Host maka Anda tidak boleh melihat peringatan tentang keaslian host jarak jauh.

  3. Di server CA, tandatangani kunci publik pengguna. Misalnya, sebagai root:

    ~]# ssh-keygen -s ~/.ssh/ca_user_key -I user1 -n user1 -V -1d:+54w /home/admin/keys/id_rsa.pub
    Enter passphrase:
    Signed user key /home/admin/keys/id_rsa-cert.pub: id "user1" serial 0 for host_name.example.com valid from 2020-05-21T16:43:17 to 2021-06-03T16:43:17
  4. Salin sertifikat yang dihasilkan ke direktori ~/.ssh/ pengguna di sistem mereka. Misalnya:

    ~]# scp /home/admin/keys/id_rsa-cert.pub user1@host_name.example.com:~/.ssh/
    user1@host_name.example.com's password:
    id_rsa-cert.pub                             100%  1498    1.5KB/s   00:00
  5. Jika menggunakan nama berkas dan lokasi standar maka tidak diperlukan konfigurasi lebih lanjut karena daemon SSH akan mencari sertifikat pengguna yang berakhiran -cert.pub dan menggunakannya secara otomatis jika menemukannya. Perhatikan bahwa lokasi dan nama berkas baku untuk kunci SSH versi 2 adalah: ~/.ssh/id_dsa, ~/.ssh/id_ecdsa dan ~/.ssh/id_rsa seperti yang dijelaskan dalam halaman manual ssh_config(5). Jika Anda menggunakan lokasi dan konvensi penamaan ini maka tidak perlu menyunting berkas konfigurasi untuk mengaktifkan sshd agar menyajikan sertifikat. Mereka akan digunakan secara otomatis saat masuk ke sistem jarak jauh. Bila ini halnya maka melompatlah ke langkah 6.

    Jika diperlukan untuk menggunakan direktori atau konvensi penamaan berkas non-baku, maka sebagai root, tambahkan baris berikut ke berkas /etc/ssh/ssh_config atau ~/.ssh/config:

    IdentityFile ~/path/ke/berkas_kunci

    Perhatikan bahwa ini harus menjadi nama kunci privat, tidak memiliki .pub atau -cert.pub. Pastikan izin berkas sudah benar. Misalnya:

    ~]$ ls -la ~/.ssh/config
    -rw-rw-r--. 1 user1 user1 36 May 27 21:49 /home/user1/.ssh/config
    chmod 700 ~/.ssh/config
    ~]$ ls -la ~/.ssh/config
    -rwx------. 1 user1 user1 36 May 27 21:49 /home/user1/.ssh/config

    Ini akan memungkinkan pengguna sistem ini diautentikasi oleh sertifikat pengguna saat masuk ke sistem jarak jauh yang dikonfigurasi untuk mempercayai kunci penandatanganan sertifikat pengguna CA.

  6. Untuk menguji sertifikat pengguna, cobalah untuk masuk ke server melalui SSH dari akun pengguna. Anda harus melakukan ini sebagai pengguna yang terdaftar sebagai prinsipal dalam sertifikat, jika ada yang ditentukan. Anda harus tidak dimintai kata sandi. Jika diperlukan, tambahkan opsi -v ke perintah SSH untuk melihat informasi pencatatan.

Menandatangani Sertifikat SSH Menggunakan Token PKCS#11

Adalah mungkin untuk menandatangani kunci host menggunakan kunci CA yang disimpan dalam token PKCS#11 dengan menyediakan pustaka token menggunakan -D dan mengidentifikasi kunci CA dengan memberikan bagian publiknya sebagai argumen terhadap opsi -s:

ssh-keygen -s ca_host_key.pub -D libpkcs11.so -I certificate_ID host_key.pub

Dalam semua kasus, certificate_ID adalah "pengidentifikasi kunci" yang dicatat oleh server ketika sertifikat digunakan untuk otentikasi.

Sertifikat dapat dikonfigurasi hanya berlaku untuk satu set pengguna atau nama host, prinsipal. Secara baku, sertifikat yang dihasilkan berlaku untuk semua pengguna atau host. Untuk menghasilkan sertifikat bagi satu set prinsipal tertentu, gunakan daftar yang dipisah koma dengan opsi -n sebagai berikut:

ssh-keygen -s ca_user_key.pub -D libpkcs11.so -I certificate_ID -n user1,user2 id_rsa.pub

dan untuhk host:

ssh-keygen -s ca_host_key.pub -D libpkcs11.so -I certificate_ID -h -n host.domain ssh_host_rsa_key.pub

Batasan tambahan pada validitas dan penggunaan sertifikat pengguna dapat ditentukan melalui opsi sertifikat. Opsi sertifikat dapat menonaktifkan fitur sesi SSH, mungkin hanya berlaku ketika disajikan dari alamat sumber tertentu atau dapat memaksa penggunaan perintah tertentu. Untuk daftar opsi sertifikat yang valid, lihat halaman manual ssh-keygen(1) untuk opsi -O.

Sertifikat dapat didefinisikan berlaku untuk umur hidup tertentu. Opsi -V memungkinkan menentukan waktu awal dan akhir sertifikat. Misalnya:

ssh-keygen -s ca_user_key -I certificate_ID -V "-1w:+54w5d" id_rsa.pub

Sertifikat yang disajikan pada waktu di luar rentang ini tidak akan dianggap sah. Secara baku, sertifikat berlaku tanpa batas waktu mulai dari Epoch UNIX.

Melihat Sertifikat CA SSH

Untuk melihat sertifikat, gunakan -L untuk mencantumkan konten. Misalnya, untuk sertifikat pengguna:

~]$ ssh-keygen -L -f ~/.ssh/id_rsa-cert.pub
/home/user1/.ssh/id_rsa-cert.pub:
        Type: ssh-rsa-cert-v01@openssh.com user certificate
        Public key: RSA-CERT SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0
        Signing CA: RSA SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0
        Key ID: "user1"
        Serial: 0
        Valid: from 2020-05-27T00:09:16 to 2021-06-09T00:09:16
        Principals:
                user1
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

Untuk melihat sertifikat host:

~]# ssh-keygen -L -f /etc/ssh/ssh_host_rsa_key-cert.pub
/etc/ssh/ssh_host_rsa_key-cert.pub:
        Type: ssh-rsa-cert-v01@openssh.com host certificate
        Public key: RSA-CERT SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0
        Signing CA: RSA SHA256:y6f0DGlHe28YWotEypnhfk3WLYQ5TgaQwoSlOFwmmm0
        Key ID: "host_name"
        Serial: 0
        Valid: from 2020-05-26T17:19:01 to 2021-06-08T17:19:01
        Principals:
                host_name.example.com
        Critical Options: (none)
        Extensions: (none)

Mencabut Sertifikat CA SSH

Jika sertifikat dicuri, itu harus dicabut. Meskipun OpenSSH tidak menyediakan mekanisme untuk mendistribusikan daftar pencabutan, masih lebih mudah untuk membuat daftar pencabutan dan mendistribusikannya dengan cara lain daripada mengubah kunci CA dan semua sertifikat host dan pengguna yang sebelumnya dibuat dan didistribusikan.

Kunci dapat dicabut dengan menambahkannya ke berkas revoked_keys dan menentukan nama berkas tersebut dalam berkas sshd_config sebagai berikut:

RevokedKeys /etc/ssh/revoked_keys

Perhatikan bahwa jika berkas ini tidak dapat dibaca, maka otentikasi kunci publik akan ditolak untuk semua pengguna.

Daftar pencabutan kunci baru dapat dihasilkan sebagai berikut:

~]$ ssh-keygen -kf  /etc/ssh/revoked_keys -z 1 ~/.ssh/id_rsa.pub

Untuk menambahkan baris ke daftar, gunakan opsi -u untuk memperbarui daftar:

ssh-keygen -ukf /etc/ssh/revoked_keys -z integer ~/.ssh/id_rsa.pub

di mana integer adalah nomor baris.

Untuk menguji apakah kunci telah dicabut, mintalah daftar pencabutan untuk keberadaan kunci. Gunakan perintah sebagai berikut:

ssh-keygen -Qf  /etc/ssh/revoked_keys ~/.ssh/id_rsa.pub

Pengguna dapat mencabut sertifikat CA dengan mengubah arahan cert-authority ke revoke di berkas known_hosts.

Klien OpenSSH

Pastikan paket yang relevan telah terpasang

Untuk terhubung ke server OpenSSH dari mesin klien, Anda harus menginstal paket openssh-clients. Lihat Memasang Paket untuk informasi lebih lanjut tentang cara memasang paket baru di Fedora 34.

Menggunakan Utilitas ssh

Utilitas ssh memungkinkan Anda masuk ke mesin jarak jauh dan menjalankan perintah di sana. Ini adalah pengganti yang aman untuk program rlogin, rsh, dan telnet.

Mirip dengan perintah telnet, masuk ke mesin remote dengan menggunakan perintah berikut:

ssh hostname

Misalnya, untuk masuk ke mesin jarak jauh bernama penguin.example.com, ketik yang berikut ini di shell prompt:

~]$ ssh penguin.example.com

Ini akan memasukkan Anda dengan nama pengguna yang sama dengan yang Anda gunakan di mesin lokal. Jika Anda ingin menentukan nama pengguna yang berbeda, gunakan perintah dalam bentuk berikut:

ssh username@hostname

Misalnya, untuk masuk ke penguin.example.com sebagai USER, ketik:

Pertama kali Anda memulai koneksi, Anda akan disajikan dengan pesan yang mirip dengan ini:

The authenticity of host 'penguin.example.com' can't be established.
ECDSA key fingerprint is SHA256:ZYEUaevOAEASvYjm58PiPdMebxhhlaTZBjTMr/N2I3c.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Pengguna harus selalu memeriksa apakah sidik jari benar sebelum menjawab pertanyaan dalam dialog ini. Pengguna dapat meminta administrator server untuk mengkonfirmasi kunci yang benar. Ini harus dilakukan dengan cara yang aman dan disepakati sebelumnya. Jika pengguna memiliki akses ke kunci host server, sidik jari dapat diperiksa dengan menggunakan perintah ssh-keygen sebagai berikut:

~]# ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:ZYEUaevOAEASvYjm58PiPdMebxhhlaTZBjTMr/N2I3c no comment (ECDSA)

Ketik yes untuk menerima kunci dan konfirmasi koneksi. Anda akan melihat pemberitahuan bahwa server telah ditambahkan ke daftar host yang dikenal, dan prompt meminta kata sandi Anda:

Warning: Permanently added 'penguin.example.com' (ECDSA) to the list of known hosts.
USER@penguin.example.com's password:
Memperbarui kunci host server SSH

Jika kunci host server SSH berubah, klien memberi tahu pengguna bahwa koneksi tidak dapat dilanjutkan sampai kunci host server dihapus dari berkas ~/.ssh/known_hosts. Namun, sebelum melakukan ini, hubungi administrator sistem server SSH untuk memverifikasi bahwa server tidak terkompromi.

Untuk menghapus kunci dari berkas ~/.ssh/known_hosts, jalankan perintah sebagai berikut:

~]# ssh-keygen -R penguin.example.com
# Host penguin.example.com found: line 15 type ECDSA
/home/USER/.ssh/known_hosts updated.
Original contents retained as /home/USER/.ssh/known_hosts.old

Setelah memasukkan kata sandi, Anda akan diberikan shell prompt untuk mesin remote.

Atau, program ssh dapat digunakan untuk menjalankan perintah pada mesin remote tanpa masuk ke shell prompt:

ssh username@hostname command

Misalnya, berkas /etc/redhat-release memberikan informasi tentang versi Fedora. Untuk melihat isi berkas ini di penguin.example.com, ketik:

~]$ ssh USER@penguin.example.com cat /etc/redhat-release
USER@penguin.example.com's password:
Fedora release 31 (Thirty One)

Setelah Anda memasukkan kata sandi yang benar, nama pengguna akan ditampilkan, dan Anda akan kembali ke shell prompt lokal Anda.

Menggunakan Utilitas scp

scp dapat digunakan untuk mentransfer berkas antar mesin melalui koneksi terenkripsi yang aman. Dalam desainnya, sangat mirip dengan rcp.

Untuk mentransfer berkas lokal ke sistem jarak jauh, gunakan perintah dalam bentuk berikut:

scp localfile username@hostname:remotefile

Misalnya, jika Anda ingin mentransfer taglist.vim ke mesin jarak jauh bernama penguin.example.com, ketik yang berikut ini di shell prompt:

~]$ scp taglist.vim USER@penguin.example.com:.vim/plugin/taglist.vim
USER@penguin.example.com's password:
taglist.vim                                   100%  144KB 144.5KB/s   00:00

Beberapa berkas dapat ditentukan sekaligus. Untuk mentransfer konten dari .vim/plugin/ ke direktori yang sama pada mesin jarak jauh penguin.example.com, ketik perintah berikut:

~]$ scp .vim/plugin/* USER@penguin.example.com:.vim/plugin/
USER@penguin.example.com's password:
closetag.vim                                  100%   13KB  12.6KB/s   00:00
snippetsEmu.vim                               100%   33KB  33.1KB/s   00:00
taglist.vim                                   100%  144KB 144.5KB/s   00:00

Untuk mentransfer berkas jarak jauh ke sistem lokal, gunakan sintaks berikut:

scp username@hostname:remotefile localfile

Misalnya, untuk mengunduh berkas konfigurasi .vimrc dari mesin jarak jauh, ketik:

~]$ scp USER@penguin.example.com:.vimrc .vimrc
USER@penguin.example.com's password:
.vimrc                                        100% 2233     2.2KB/s   00:00

Protokol SCP tidak dirancang dengan baik dan dapat menyebabkan hasil yang tidak terduga. Di masa lalu itu adalah sumber dari beberapa CVE di mana server jahat bisa menimpa berkas dalam sistem berkas lokal saat mengunduh berkas. Dianjurkan untuk menggunakan SFTP jika memungkinkan. Lihat bagian berikutnya untuk informasi selengkapnya.

Menggunakan Utilitas sftp

Utilitas sftp dapat digunakan untuk membuka sesi SFTP yang aman dan interaktif. Dalam desainnya, ini mirip dengan ftp kecuali bahwa ia menggunakan koneksi terenkripsi yang aman.

Untuk menyambungkan ke sistem jarak jauh, gunakan perintah dalam bentuk berikut:

sftp username@hostname

Misalnya, untuk masuk ke mesin jarak jauh bernama penguin.example.com dengan USER sebagai nama pengguna, ketik:

~]$ sftp USER@penguin.example.com
USER@penguin.example.com's password:
Connected to penguin.example.com.
sftp>

Setelah Anda memasukkan kata sandi yang benar, Anda akan disajikan dengan prompt. Utilitas sftp menerima satu set perintah yang mirip dengan yang digunakan oleh ftp (lihat Pilihan perintah sftp yang tersedia).

Tabel 3. Pilihan perintah sftp yang tersedia
Perintah Deskripsi

ls [directory]]

Daftar konten directory. Jika tidak ada yang disediakan, direktori kerja saat ini digunakan secara baku.

cd directory

Ubah direktori kerja jarak jauh menjadi directory.

mkdir directory

Membuat directory.

rmdir directory

Menghapus directory.

put localfile [remotefile]]

Transfer localfile ke mesin jarak jauh.

get remotefile [localfile]]

Transfer remotefile dari mesin jarak jauh.

Untuk daftar lengkap perintah yang tersedia, lihat halaman manual sftp(1).

Lebih Dari Shell Aman

Antarmuka baris perintah yang aman hanyalah awal dari banyak cara SSH dapat digunakan. Dengan diberi sejumlah bandwidth yang tepat, sesi X11 dapat diarahkan melalui saluran SSH. Atau, dengan menggunakan TCP/IP forwarding, koneksi port yang sebelumnya tidak aman antara sistem dapat dipetakan ke saluran SSH tertentu.

Penerusan X11

Untuk membuka sesi X11 melalui koneksi SSH, gunakan perintah dalam bentuk berikut:

ssh -Y username@hostname

Misalnya, untuk masuk ke mesin jarak jauh bernama penguin.example.com dengan USER sebagai nama pengguna, ketik:

Ketika program X dijalankan dari prompt shell yang aman, klien dan server SSH membuat saluran aman baru, dan data program X dikirim melalui saluran itu ke mesin klien secara transparan.

Perhatikan bahwa sistem X Window harus diinstal pada sistem remote sebelum penerusan X11 dapat terjadi. Masukkan perintah berikut sebagai root untuk menginstal grup paket X11:

~]# dnf group install "X Window System"

Penerusan X11 bisa sangat berguna. Misalnya, penerusan X11 dapat digunakan untuk membuat sesi interaktif yang aman dari utilitas Pengaturan Cetak. Untuk melakukan ini, sambungkan ke server menggunakan ssh dan ketik:

~]$ system-config-printer &

Alat Print Settings akan muncul, memungkinkan pengguna jarak jauh untuk mengkonfigurasi pencetakan dengan aman pada sistem jarak jauh.

Penerusan Port

SSH dapat mengamankan protokol TCP/IP yang tidak aman melalui penerusan port. Saat menggunakan teknik ini, server SSH menjadi saluran terenkripsi ke klien SSH.

Penerusan port bekerja dengan memetakan port lokal pada klien ke port jarak jauh di server. SSH dapat memetakan port apa pun dari server ke port apa pun pada klien. Nomor port tidak perlu cocok untuk teknik ini bekerja.

Menggunakan nomor port yang dicadangkan

Menyiapkan penerusan port untuk mendengarkan pada port di bawah 1024 membutuhkan akses tingkat root.

Untuk membuat saluran penerusan port TCP/IP yang mendengarkan koneksi di localhost, gunakan perintah dalam bentuk berikut:

ssh -L local-port:remote-hostname:remote-port username@hostname

Misalnya, untuk memeriksa surel di server yang disebut mail.example.com menggunakan POP3 melalui koneksi terenkripsi, gunakan perintah berikut:

~]$ ssh -L 1100:mail.example.com:110 mail.example.com

Setelah saluran penerusan port terjalin antara mesin klien dan server surel, arahkan klien surel POP3 untuk menggunakan port 1100 di localhost untuk memeriksa surel baru. Setiap permintaan yang dikirim ke port 1100 pada sistem klien akan diarahkan dengan aman ke server mail.example.com.

Jika mail.example.com tidak menjalankan server SSH, tetapi mesin lain pada jaringan yang sama begitu, SSH masih dapat digunakan untuk mengamankan sebagian dari koneksi. Namun, perintah yang sedikit berbeda diperlukan:

~]$ ssh -L 1100:mail.example.com:110 other.example.com

Dalam contoh ini, permintaan POP3 dari port 1100 pada mesin klien diteruskan melalui koneksi SSH pada port 22 ke server SSH, other.example.com. Kemudian, other.example.com terhubung ke port 110 di mail.example.com untuk memeriksa surel baru. Perhatikan bahwa saat menggunakan teknik ini, hanya koneksi antara sistem klien dan server SSH other.example.com yang aman.

Penerusan port juga dapat digunakan untuk mendapatkan informasi dengan aman melalui firewall jaringan. Jika firewall dikonfigurasi untuk memungkinkan lalu lintas SSH melalui port standarnya (yaitu, port 22) tetapi memblokir akses ke port lain, koneksi antara dua host menggunakan port yang diblokir masih dimungkinkan dengan mengalihkan komunikasi mereka melalui koneksi SSH yang sudah mapan.

Koneksi hanya seaman sistem klien

Menggunakan penerusan port untuk meneruskan koneksi dengan cara ini memungkinkan setiap pengguna pada sistem klien untuk terhubung ke layanan itu. Jika sistem klien menjadi terkompromi, penyerang juga memiliki akses ke layanan yang diteruskan.

Administrator sistem yang peduli tentang penerusan port dapat menonaktifkan fungsi ini di server dengan menentukan parameter No untuk baris AllowTcpForwarding di /etc/ssh/sshd_config dan memulai ulang layanan sshd.

Sumber Daya Tambahan

Untuk informasi lebih lanjut tentang cara mengkonfigurasi atau terhubung ke server OpenSSH di Fedora, lihat sumber daya yang tercantum di bawah ini.

Dokumentasi Terpasang
  • sshd(8) - Halaman manual untuk dokumen daemon sshd mendokumentasikan opsi baris perintah yang tersedia dan menyediakan daftar lengkap berkas dan direktori konfigurasi yang didukung.

  • ssh(1) — Halaman manual untuk aplikasi klien ssh menyediakan daftar lengkap opsi baris perintah yang tersedia dan berkas konfigurasi dan direktori yang didukung.

  • scp(1) - Halaman manual untuk utilitas scp memberikan deskripsi yang lebih rinci tentang utilitas ini dan penggunaannya.

  • sftp(1) — Halaman manual untuk utilitas sftp.

  • ssh-keygen(1) — Halaman manual untuk utilitas ssh-keygen mendokumentasikan secara rinci bagaimana menggunakannya untuk menghasilkan, mengelola, dan mengonversi kunci-kunci otentikasi yang digunakan oleh ssh.

  • ssh_config(5) — Halaman manual bernama ssh_config mendokumentasikan opsi-opsi konfigurasi klien SSH yang tersedia.

  • sshd_config(5) - Halaman manual bernama sshd_config memberikan deskripsi lengkap tentang opsi konfigurasi daemon SSH yang tersedia.

Dokumentasi Daring
  • Beranda OpenSSH — Halaman beranda OpenSSH yang berisi dokumentasi lebih lanjut, pertanyaan yang sering diajukan, tautan ke milis, laporan bug, dan sumber daya berguna lainnya.

  • Beranda OpenSSL — Halaman beranda OpenSSL yang berisi dokumentasi lebih lanjut, pertanyaan yang sering diajukan, tautan ke milis, dan sumber daya berguna lainnya.


1. Koneksi ter-multipleks yang terdiri dari beberapa sinyal yang dikirim melalui media bersama dan umum. Dengan SSH, kanal yang berbeda dikirim melalui koneksi aman umum.