Layanan sshd (Secure Shell Daemon) adalah bagian dari implementasi OpenSSH untuk Linux yang menyediakan komunikasi jaringan terenkripsi ujung-ke-ujung yang diautentikasi. Misalnya, pengguna di satu host dapat masuk ke sistem lain tanpa menggunakan kata sandi karena layanan sshd dapat dikonfigurasi untuk menggunakan teknik otentikasi alternatif seperti bertukar informasi kunci bersama.
OpenSSH menggunakan teknologi klien/server. Klien, seperti pengguna yang menjalankan program ssh, memulai koneksi ke server sshd pada host target. Pesan dalam protokol SSH dipertukarkan untuk mengotentikasi klien ke host target dan akses jarak jauh kemudian diizinkan atau ditolak. Jika diizinkan, maka koneksi TCP/IP dibangun untuk memungkinkan klien bertukar perintah dan data dengan aplikasi yang dibuat oleh daemon sshd pada sistem target.
Manfaat alat OpenSSH adalah semua pertukaran komunikasi dienkripsi. Informasi otentikasi seperti nama pengguna, kata sandi, dan data sesi tidak pernah dikirimkan dalam bentuk tidak terenkripsi. Tidak seperti alternatif seperti telnet atau ftp yang secara eksklusif menggunakan transmisi teks yang jelas.
openssh-server Paket RPM menyediakan /usr/sbin/sshd daemon dan file konfigurasinya.
Ada dua versi protokol komunikasi SSH, versi 1 dan versi 2. Baik klien, seperti scp, dan server sshd harus menggunakan versi protokol yang sama. Server sshd mendukung kedua versi protokol secara default, tetapi setiap versi dikonfigurasi secara terpisah.
Koneksi antara klien dan daemon sshd dibuat pada port TCP/IP 22 secara default, menggunakan protokol UDP atau TCP. Pertama, klien dan server harus menyetujui metode enkripsi:sshd mengirimkan daftar sandi yang didukung dan klien memilih preferensinya. Server mengidentifikasi host-nya menggunakan /etc/ssh/ssh_host_key (protokol versi 1) atau salah satu dari /etc/ssh/ssh_host_[rd]sa_key (versi protokol 2). Hal ini memungkinkan klien untuk mendeteksi spoofing IP atau serangan man-in-the-middle. Dengan ID host diverifikasi, klien kemudian mencoba satu atau lebih metode otentikasi untuk menetapkan kredensial akses sistem untuk pengguna. Kunci enkripsi publik dicoba terlebih dahulu, dengan kembali ke tantangan sandi tradisional. Menggunakan klien ssh, negosiasi lengkap dapat dilihat dengan menambahkan sakelar “-v”, seperti ini:
$ ssh -vvv myhost.example.com
Daemon sshd menggunakan /etc/pam.d/sshd file untuk menentukan aturan otentikasi yang diperlukan untuk host-nya. File default disediakan oleh paket RPM openssh-server dan cukup untuk sebagian besar situs.
Setelah akses pengguna diautentikasi, daemon sshd(8) kemudian memulai program aplikasi yang diinginkan klien dengan file input/error/output standar (stdin, stderr, stdout) yang dilampirkan ke sesi TCP/IP.
Fitur dan perilaku yang tersedia dengan daemon sshd(8) dikendalikan oleh konfigurasi seluruh sistem file /etc/ssh/sshd_config. File default disediakan dengan paket RPM tetapi dapat diedit agar sesuai dengan kebutuhan lokal. Misalnya, untuk mencegah login root menggunakan ssh, pengaturan sshd_config dapat diubah seperti pada cuplikan ini:
# vi /etc/ssh/sshd_config PermitRootLogin no
Kontrol Layanan
Untuk mengelola layanan sshd sesuai permintaan, gunakan perintah layanan atau jalankan skrip /etc/init.d/sshd secara langsung:
# /sbin/service sshd help Usage: /etc/init.d/sshd {start|stop|restart|reload|condrestart|status}
# /etc/init.d/sshd help Usage: /etc/init.d/sshd {start|stop|restart|reload|condrestart|status}
Perintah yang tersedia adalah:
Perintah | Deskripsi |
---|---|
mulai | Mulai daemon sshd . |
berhenti | Hentikan daemon sshd. |
mulai ulang | Setara dengan berhenti lalu urutan perintah mulai. |
muat ulang | Paksa daemon sshd untuk membaca ulang file konfigurasinya tanpa gangguan layanan. |
memulai ulang | Jika daemon sshd sedang berjalan, ini sama dengan perintah restart. Jika daemon tidak berjalan, tidak ada tindakan yang diambil. Sering digunakan dalam instalasi paket RPM untuk menghindari memulai layanan yang belum berjalan. |
status | Jika daemon sshd sedang berjalan, laporkan PID (Process ID)-nya. Jika tidak berjalan, laporkan juga. |
Daemon sshd paling sering dimulai oleh layanan sshd atau oleh daemon xinetd(8). Memberikan argumen baris perintah secara langsung dimungkinkan, tetapi biasanya tidak dilakukan. Sebagai gantinya, argumen baris perintah tambahan dapat diberikan ke daemon sshd(8) dengan membuat file /etc/sysconfig/sshd dan mendefinisikan variabel ${OPTIONS}:
# Additional command line options for sshd OPTIONS="-q"
Contoh ini akan mengaktifkan mode senyap, mencegah sshd mencatat awal, autentikasi, dan akhir setiap sesi. Lihat halaman manual online untuk sshd untuk detail opsi baris perintah yang tersedia.
Konfigurasi
Untuk mengelola layanan sshd saat boot, gunakan alat chkconfig:
# /sbin/chkconfig --list sshd sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# /sbin/chkconfig sshd on
# /sbin/chkconfig --list sshd sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Berbagai file konfigurasi digunakan untuk menyesuaikan daemon sshd untuk operasi yang bergantung pada situs. Ini dijelaskan di bawah ini:
Jalur File Konfigurasi | Deskripsi |
---|---|
/etc/ssh/sshd_config | File konfigurasi yang diperlukan. Sebagian besar nilai default diberikan sebagai komentar. |
/etc/ssh/ssh_host_key | Berisi kunci host yang digunakan untuk protokol SSH versi 1. Diperlukan hanya jika protokol versi 1 digunakan. |
/etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key | Berisi kunci host yang digunakan untuk protokol SSH versi 2. Diperlukan hanya jika protokol versi 2 digunakan. |
/etc/motd | File pesan hari ini ditampilkan ke klien ssh setelah login berhasil. |
~/.hushlogin | Jika file ada, file /etc/motd tidak ditampilkan oleh ssh setelah login berhasil. |
/etc/nologin | Jika file ada, kontennya ditampilkan oleh klien dan sesi kemudian dihentikan. Diabaikan untuk login root. |
~/.ssh/environment | Jika file ada dan parameter sshd_config PermitUserEnvironmentis ditetapkan, maka variabel lingkungan shell dari file ini akan diekspor ke sesi SSH. |
~/.ssh/rc /etc/ssh/sshrc | Berkas diperiksa dalam urutan yang ditunjukkan dan yang pertama ditemukan dijalankan. Jika keduanya tidak ditemukan, utilitas xauth akan dijalankan. |
~/.ssh/authorized_keys | Mencantumkan kunci publik yang digunakan untuk otentikasi sesi RSA. |
~/.ssh/known_hosts /etc/ssh/ssh_known_hosts | Berisi kunci publik host untuk semua host yang dikenal. File per pengguna dipertahankan secara otomatis. File global opsional dikelola oleh administrator sistem. |
/etc/moduli /etc/ssh/moduli | Berlawanan dengan halaman manual, file /etc/moduli tidak digunakan dalam penerapan ini. File /etc/ssh/moduli berisi grup Diffie-Hellman yang digunakan untuk negosiasi protokol “Diffie-Hellman Group Exchange”. |
/var/kosong/sshd | direktori chroot yang digunakan selama pemisahan hak istimewa sebelum menyelesaikan fase autentikasi. Dimiliki oleh root dan tidak dapat ditulis oleh dunia, direktori ini biasanya hanya berisi file etc/localtime untuk presentasi waktu dan tanggal. |
/etc/hosts.allow /etc/hosts.deny | Kontrol akses akan diterapkan oleh fasilitas tcp_wrappers. Lihat tcpd untuk detail selengkapnya. |
~/.rhosts | Digunakan untuk otentikasi RSA atau otentikasi berbasis host. Daftar pasangan nama pengguna/nama host untuk mengidentifikasi login yang tidak memerlukan pertukaran kata sandi. |
~/.shosts | Mirip dengan ~/.rhosts, tetapi diabaikan oleh utilitas rlogin atau rshd. |
/etc/hosts.equiv | Daftar host di mana tantangan sandi tidak diperlukan selama nama pengguna cocok pada host klien dan server. Jika suatu baris juga berisi nama pengguna, pengguna di mesin klien tersebut dapat masuk ke akun server mana pun, bahkan akun root host; ini umumnya tidak disarankan. |
/etc/shosts.equiv | Diproses secara identik dengan file /etc/hosts.equiv , file ini diabaikan oleh daemon rsh dan rshd. |
File konfigurasi /etc/ssh/sshd_config
Di bawah ini adalah contoh file Konfigurasi /etc/ssh/sshd_config.
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/usr/bin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging #SyslogFacility AUTH SyslogFacility AUTHPRIV #LogLevel INFO # Authentication: #LoginGraceTime 2m #PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 #PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication no # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no #KerberosUseKuserok yes # GSSAPI options GSSAPIAuthentication yes GSSAPICleanupCredentials no #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no #GSSAPIEnablek5users no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. # WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several # problems. UsePAM yes #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation sandbox #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #ShowPatchLevel no #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # no default banner path #Banner none # Accept locale-related environment variables AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server