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

The client transmits its authentication information to the server using strong, 128-bit encryption.

Tidak ada yang bisa mencegat komunikasi

All data sent and received during a session is transferred using 128-bit encryption, making intercepted transmissions extremely difficult to decrypt and read.

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

Two varieties of SSH currently exist: version 1 and version 2. The OpenSSH suite under Fedora uses SSH version 2, which has an enhanced key exchange algorithm not vulnerable to the known exploit in version 1. However, for compatibility reasons, the OpenSSH suite does support version 1 connections as well, although version 1 is disabled by default and needs to be enabled in the configuration files.

Avoid using SSH version 1

To ensure maximum security for your connection, it is recommended that only SSH version 2-compatible servers and clients are used whenever possible.

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.

Transport Layer The primary role of the transport layer is to facilitate safe and secure communication between the two hosts at the time of authentication and during subsequent communication. The transport layer accomplishes this by handling the encryption and decryption of data, and by providing integrity protection of data packets as they are sent and received. The transport layer also provides compression, speeding the transfer of information.

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

  • Kunci dipertukarkan

  • The public key encryption algorithm is determined

  • Algoritma enkripsi simetris ditentukan

  • Algoritma otentikasi pesan ditentukan

  • The hash algorithm is determined

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.

After a certain amount of data has been transmitted using a given key and algorithm (the exact amount depends on the SSH implementation), another key exchange occurs, generating another set of hash values and a new shared secret value. Even if an attacker is able to determine the hash and shared secret value, this information is only useful for a limited period of time.

Authentication Once the transport layer has constructed a secure tunnel to pass information between the two systems, the server tells the client the different authentication methods supported, such as using a private key-encoded signature or typing a password. The client then tries to authenticate itself to the server using one of these supported methods.

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.

Channels After a successful authentication over the SSH transport layer, multiple channels are opened via a technique called multiplexing[1]. Each of these channels handles communication for different terminal sessions and for forwarded X11 sessions.

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

There are two different sets of configuration files: those for client programs (that is, ssh, scp, and sftp), and those for the server (the sshd daemon). System-wide SSH configuration information is stored in the /etc/ssh/ directory as described in System-wide configuration files. User-specific SSH configuration information is stored in ~/.ssh/ within the user’s home directory as described in User-specific configuration files.

Tabel 1. Berkas konfigurasi seluruh sistem
File Description

/etc/ssh/moduli

Contains Diffie-Hellman groups used for the Diffie-Hellman key exchange which is critical for constructing a secure transport layer. When keys are exchanged at the beginning of an SSH session, a shared, secret value is created which cannot be determined by either party alone. This value is then used to provide host authentication.

/etc/ssh/ssh_config

The default SSH client configuration file. Note that it is overridden by ~/.ssh/config if it exists.

/etc/ssh/sshd_config

The configuration file for the sshd daemon.

/etc/ssh/ssh_host_ecdsa_key

The ECDSA private key used by the sshd daemon.

/etc/ssh/ssh_host_ecdsa_key.pub

The ECDSA public key used by the sshd daemon.

/etc/ssh/ssh_host_key

The RSA private key used by the sshd daemon for version 1 of the SSH protocol.

/etc/ssh/ssh_host_key.pub

The RSA public key used by the sshd daemon for version 1 of the SSH protocol.

/etc/ssh/ssh_host_rsa_key

The RSA private key used by the sshd daemon for version 2 of the SSH protocol.

/etc/ssh/ssh_host_rsa_key.pub

The RSA public key used by the sshd daemon for version 2 of the SSH protocol.

/etc/pam.d/sshd

The PAM configuration file for the sshd daemon.

/etc/sysconfig/sshd

Configuration file for the sshd service.

Tabel 2. Berkas konfigurasi spesifik pengguna
File Description

~/.ssh/authorized_keys

Holds a list of authorized public keys for servers. When the client connects to a server, the server authenticates the client by checking its signed public key stored within this file.

~/.ssh/id_ecdsa

Contains the ECDSA private key of the user.

~/.ssh/id_ecdsa.pub

The ECDSA public key of the user.

~/.ssh/id_rsa

The RSA private key used by ssh for version 2 of the SSH protocol.

~/.ssh/id_rsa.pub

The RSA public key used by ssh for version 2 of the SSH protocol.

~/.ssh/identity

The RSA private key used by ssh for version 1 of the SSH protocol.

~/.ssh/identity.pub

The RSA public key used by ssh for version 1 of the SSH protocol.

~/.ssh/known_hosts

Contains host keys of SSH servers accessed by the user. This file is very important for ensuring that the SSH client is connecting to the correct SSH server.

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

To run an OpenSSH server, you must have the openssh-server package installed. See Installing Packages for more information on how to install new packages in Fedora 26.

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'

See Services and Daemons for more information on how to configure services in 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.

To prevent this, you can backup the relevant files from the /etc/ssh/ directory (see System-wide configuration files for a complete list), and restore them whenever you reinstall the system.

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

See Services and Daemons for more information on how to configure services in Fedora.

Menggunakan Otentikasi Berbasis Kunci

To improve the system security even further, generate SSH key pairs and then enforce key-based authentication by disabling password authentication. To do so, open the /etc/ssh/sshd_config configuration file in a text editor such as vi or nano, and change the PasswordAuthentication option as follows:

PasswordAuthentication no

If you are working on a system other than a new default installation, check that PubkeyAuthentication no has not been set. If connected remotely, not using console or out-of-band access, testing the key-based log in process before disabling password authentication is advised.

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 26 uses SSH Protocol 2 and RSA keys by default (see Protocol Versions for more information).

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.

Generating Key Pairs To generate an RSA key pair for version 2 of the SSH protocol, follow these steps:
  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:

    Your identification has been saved in /home/USER/.ssh/id_rsa.
    Your public key has been saved in /home/USER/.ssh/id_rsa.pub.
    The key fingerprint is:
    e7:97:c7:e2:0e:f9:0e:fc:c4:d7:cb:e5:31:11:92:14 USER@penguin.example.com
    The key's randomart image is:
    +--[ RSA 2048]----+
    |             E.  |
    |            . .  |
    |             o . |
    |              . .|
    |        S .    . |
    |         + o 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:

    Your identification has been saved in /home/USER/.ssh/id_ecdsa.
    Your public key has been saved in /home/USER/.ssh/id_ecdsa.pub.
    The key fingerprint is:
    fd:1d:ca:10:52:96:21:43:7e:bd:4c:fc:5b:35:6b:63 USER@penguin.example.com
    The key's randomart image is:
    +--[ECDSA  256]---+
    |       .+ +o     |
    |       . =.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.

See Configuring ssh-agent for information on how to set up your system to remember the passphrase.

Jangan pernah berbagi kunci privat Anda

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

Configuring ssh-agent To store your passphrase so that you do not have to enter it each time you initiate a connection with a remote machine, you can use the ssh-agent authentication agent.

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 2015.
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

It is recommended to create and store CA keys in a safe place just as with any other private key. In these examples the root user will be used. In a real production environment using an offline computer with an administrative user account is recommended. For guidance on key lengths see 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:
    11:14:2f:32:fd:5d:f5:e4:7a:5a:d6:b6:a0:62:c9:1f 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:
    e4:d5:d1:4f:6b:fd:a2:e3:4e:5a:73:52:91:0b:b7:7a 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 2015-05-15T13:52:29 to 2016-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.
RSA key fingerprint is fc:23:ad:ae:10:6f:d1:a1:67:ee:b1:d5:37:d4:b0:2f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'host_name.example.com,10.34.74.56' (RSA) 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:

    ~]# service sshd restart

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 ..
Creating SSH Certificates to Authenticate Hosts

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.
    RSA key fingerprint is b0:e5:ea:b8:75:e2:f0:b1:fe:5b:07:39:7f:58:64:d9.
    Are you sure you want to continue connecting (yes/no)? 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 2015-05-26T12:21:54 to 2016-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:

    ~]# service sshd restart
  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.

To test the host certificate, on a client system, ensure the client has set up the global /etc/ssh/known_hosts file, as described in Trusting the Host Signing Key, and that the server’s public key is not in the ~/.ssh/known_hosts file. Then attempt to log into the server over SSH as a remote user. You should not see a warning about the authenticity of the host. If required, add the -v option to the SSH command to see logging information.

Creating SSH Certificates for Authenticating Users

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:
    b1:f8:26:a7:46:87:c3:60:54:a3:6d:85:0d:60:fe:ce 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

    See Using Key-based Authentication for more examples of key generation and for instructions on setting the correct directory permissions.

  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

    If you have configured the client system to trust the host signing key as described in Trusting the Host Signing Key then you should not see a warning about the authenticity of the remote host.

  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 2015-05-21T16:43:17 to 2016-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

In all cases, certificate_ID is a "key identifier" that is logged by the server when the certificate is used for authentication.

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 id_rsa.pub -V "-1w:+54w5d"

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 3c:9d:42:ed:65:b6:0f:18:bf:52:77:c6:02:0e:e5:86
        Signing CA: RSA b1:8e:0b:ce:fe:1b:67:59:f1:74:cd:32:af:5f:c6:e8
        Key ID: "user1"
        Serial: 0
        Valid: from 2015-05-27T00:09:16 to 2016-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 1d:71:61:50:05:9b:ec:64:34:27:a5:cc:67:24:03:23
        Signing CA: RSA e4:d5:d1:4f:6b:fd:a2:e3:4e:5a:73:52:91:0b:b7:7a
        Key ID: "host_name"
        Serial: 0
        Valid: from 2015-05-26T17:19:01 to 2016-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

To connect to an OpenSSH server from a client machine, you must have the openssh-clients package installed. See Installing Packages for more information on how to install new packages in Fedora 26.

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 256 da:24:43:0b:2e:c1:3f:a1:84:13:92:01:52:b4:84:ff.
Are you sure you want to continue connecting (yes/no)?

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 da:24:43:0b:2e:c1:3f:a1:84:13:92:01:52:b4:84:ff   (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 20 (Heisenbug)

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
Menggunakan Utilitas sftp

The sftp utility can be used to open a secure, interactive FTP session. In its design, it is similar to ftp except that it uses a secure, encrypted connection.

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
Command Description

ls [directory]

List the content of a remote directory. If none is supplied, a current working directory is used by default.

cd directory

Change the remote working directory to directory.

mkdir directory

Create a remote directory.

rmdir path

Remove a remote directory.

put localfile [remotefile]

Transfer localfile to a remote machine.

get remotefile [localfile]

Transfer remotefile from a remote machine.

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 Yang 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
  • OpenSSH Home Page — The OpenSSH home page containing further documentation, frequently asked questions, links to the mailing lists, bug reports, and other useful resources.

  • OpenSSL Home Page — The OpenSSL home page containing further documentation, frequently asked questions, links to the mailing lists, and other useful resources.


1. A multiplexed connection consists of several signals being sent over a shared, common medium. With SSH, different channels are sent over a common secure connection.