Linux / Perintah Unix: sshd

Nama

sshd - OpenSSH SSH daemon

Ringkasan

sshd [- deiqtD46 ] [- b bits ] [- f config_file ] [- g login_grace_time ] [- h host_key_file ] [- k key_gen_time ] [- o option ] [- p port ] [- u len ]

Deskripsi

sshd (SSH Daemon) adalah program daemon untuk ssh (1). Bersama-sama program-program ini menggantikan rlogin dan rsh , dan menyediakan komunikasi terenkripsi yang aman antara dua host yang tidak dipercaya melalui jaringan yang tidak aman. Program ini dimaksudkan agar mudah dipasang dan digunakan sebaik mungkin.

sshd adalah daemon yang mendengarkan koneksi dari klien. Biasanya dimulai saat boot dari / etc / rc. Ini membuat daemon baru untuk setiap koneksi masuk. Daemon bercabang menangani pertukaran kunci, enkripsi, otentikasi, eksekusi perintah, dan pertukaran data. Implementasi sshd ini mendukung kedua protokol SSH versi 1 dan 2 secara bersamaan.

Protokol SSH Versi 1

Setiap host memiliki kunci RSA khusus host (biasanya 1024 bit) yang digunakan untuk mengidentifikasi host. Selain itu, ketika daemon dimulai, ia menghasilkan kunci RSA server (biasanya 768 bit). Kunci ini normalnya diregenerasi setiap jam jika telah digunakan, dan tidak pernah disimpan pada disk.

Setiap kali klien menghubungkan daemon akan merespon dengan host publik dan kunci servernya. Klien membandingkan kunci host RSA dengan databasenya sendiri untuk memverifikasi bahwa itu tidak berubah. Klien kemudian menghasilkan nomor acak 256-bit. Ini mengenkripsi nomor acak ini menggunakan kunci host dan kunci server dan mengirimkan nomor terenkripsi ke server. Kedua pihak kemudian menggunakan nomor acak ini sebagai kunci sesi yang digunakan untuk mengenkripsi semua komunikasi lebih lanjut dalam sesi. Sisa sesi dienkripsi menggunakan cipher konvensional, saat ini Blowfish atau 3DES, dengan 3DES digunakan secara default. Klien memilih algoritma enkripsi untuk digunakan dari yang ditawarkan oleh server.

Selanjutnya, server dan klien memasukkan dialog otentikasi. Klien mencoba untuk mengotentikasi sendiri menggunakan otentikasi .rhosts, .rhosts otentikasi dikombinasikan dengan otentikasi host RSA, RSA respon tantangan-respons, atau otentikasi berbasis kata sandi .

Otentikasi Rhosts biasanya dinonaktifkan karena secara fundamental tidak aman, tetapi dapat diaktifkan di file konfigurasi server jika diinginkan. Keamanan sistem tidak diperbaiki kecuali rshd rlogind dan rexecd dinonaktifkan (sehingga benar-benar menonaktifkan rlogin dan rsh ke dalam mesin).

Protokol SSH Versi 2

Versi 2 bekerja sama: Setiap host memiliki kunci khusus host (RSA atau DSA) yang digunakan untuk mengidentifikasi host. Namun, ketika daemon dimulai, ia tidak menghasilkan kunci server. Keamanan ke depan disediakan melalui kesepakatan kunci Diffie-Hellman. Kesepakatan kunci ini menghasilkan kunci sesi bersama.

Sisa sesi dienkripsi menggunakan cipher simetris, saat ini 128 bit AES, Blowfish, 3DES, CAST128, Arcfour, 192 bit AES, atau 256 bit AES. Klien memilih algoritma enkripsi untuk digunakan dari yang ditawarkan oleh server. Selain itu, integritas sesi disediakan melalui kode otentikasi pesan kriptografi (hmac-sha1 atau hmac-md5).

Protokol versi 2 menyediakan metode otentikasi pengguna kunci publik (PubkeyAuthentication) atau host klien (HostbasedAuthentication), otentikasi kata sandi konvensional, dan metode berbasis respons-respons.

Eksekusi Perintah dan Penerusan Data

Jika klien berhasil mengautentikasi dirinya sendiri, sebuah dialog untuk mempersiapkan sesi dimasukkan. Saat ini klien dapat meminta hal-hal seperti mengalokasikan koneksi pseudo-tty, meneruskan X11, meneruskan koneksi TCP / IP, atau meneruskan koneksi agen autentikasi melalui saluran aman.

Akhirnya, klien meminta shell atau eksekusi perintah. Sisi-sisinya kemudian masuk ke mode sesi. Dalam mode ini, salah satu pihak dapat mengirim data kapan saja, dan data tersebut diteruskan ke / dari shell atau perintah di sisi server, dan terminal pengguna di sisi klien.

Ketika program pengguna berakhir dan semua X11 yang diteruskan dan koneksi lain telah ditutup, server mengirim status perintah keluar ke klien dan kedua sisi keluar.

sshd dapat dikonfigurasi menggunakan opsi baris perintah atau file konfigurasi. Opsi baris perintah menimpa nilai yang ditentukan dalam file konfigurasi.

sshd membaca ulang file konfigurasinya ketika menerima sinyal hangup, SIGHUP dengan mengeksekusi dirinya dengan nama dimulai sebagai, yaitu, / usr / sbin / sshd

Pilihannya adalah sebagai berikut:

-b bit

Menentukan jumlah bit di kunci server protokol versi 1 sementara (default 768).

-d

Mode debug. Server mengirimkan debug output verbose ke log sistem dan tidak menempatkan dirinya di latar belakang. Server juga tidak akan berfungsi dan hanya akan memproses satu koneksi. Opsi ini hanya ditujukan untuk debugging untuk server. Opsi banyak -d meningkatkan tingkat debugging. Maksimal adalah 3.

-e

Ketika opsi ini ditentukan, sshd akan mengirim output ke kesalahan standar daripada log sistem.

-f configuration_file

Menentukan nama file konfigurasi. Standarnya adalah / etc / ssh / sshd_config sshd menolak untuk memulai jika tidak ada file konfigurasi.

-g login_grace_time

Memberikan tenggang waktu bagi klien untuk mengotentikasi diri mereka (default 120 detik). Jika klien gagal untuk mengotentikasi pengguna dalam beberapa detik ini, server terputus, dan keluar. Nilai nol menunjukkan tidak ada batasan.

-h host_key_file

Menentukan file dari mana kunci host dibaca. Opsi ini harus diberikan jika sshd tidak dijalankan sebagai root (karena file kunci host normal biasanya tidak dapat dibaca oleh siapa pun kecuali root). Standarnya adalah /etc/ssh/ssh_host_key untuk protokol versi 1, dan / etc / ssh / ssh_host_rsa_key dan / etc / ssh / ssh_host_dsa_key untuk versi protokol 2. Ada kemungkinan untuk memiliki beberapa file kunci host untuk versi protokol dan kunci host yang berbeda algoritma.

-saya

Menentukan sshd yang sedang dijalankan dari inetd. sshd biasanya tidak dijalankan dari inetd karena perlu menghasilkan kunci server sebelum dapat merespon ke klien, dan ini mungkin memerlukan waktu puluhan detik. Klien harus menunggu terlalu lama jika kuncinya diregenerasi setiap saat. Namun, dengan ukuran kunci yang kecil (misalnya, 512) menggunakan sshd dari inetd mungkin layak.

-k key_gen_time

Menentukan seberapa sering kunci server versi 1 protokol ephemeral diregenerasikan (default 3600 detik, atau satu jam). Motivasi untuk meregenerasi kunci cukup sering adalah bahwa kunci tidak disimpan di mana saja, dan setelah sekitar satu jam, menjadi tidak mungkin untuk memulihkan kunci untuk mendekripsi komunikasi yang dicegat bahkan jika mesin itu retak atau disita secara fisik. Nilai nol menunjukkan bahwa kunci tidak akan pernah diregenerasi.

opsi -o

Dapat digunakan untuk memberikan opsi dalam format yang digunakan dalam file konfigurasi. Ini berguna untuk menentukan opsi yang tidak ada bendera baris perintah terpisah.

-p port

Menentukan port tempat server mendengarkan koneksi (default 22). Beberapa opsi port diizinkan. Port yang ditentukan dalam file konfigurasi diabaikan ketika port baris perintah ditentukan.

-q

Mode diam. Tidak ada yang dikirim ke log sistem. Biasanya awal, otentikasi, dan penghentian setiap koneksi dicatat.

-t

Mode tes. Hanya memeriksa validitas file konfigurasi dan kewarasan kunci. Ini berguna untuk memperbarui sshd andal karena opsi konfigurasi dapat berubah.

-u len

Opsi ini digunakan untuk menentukan ukuran bidang dalam struktur utmp yang memegang nama host jarak jauh. Jika nama host yang diselesaikan lebih panjang dari len maka nilai desimal bertitik akan digunakan sebagai gantinya. Ini memungkinkan host dengan nama host yang sangat panjang yang meluap-luap bidang ini untuk tetap diidentifikasi secara unik. Menentukan - u0 menunjukkan bahwa hanya alamat desimal putus-putus yang harus dimasukkan ke dalam file utmp. - U0 juga digunakan untuk mencegah sshd membuat permintaan DNS kecuali mekanisme atau konfigurasi otentikasi memerlukannya. Otentikasi mekanisme yang mungkin memerlukan DNS termasuk RhostsAuthentication RhostsRSAAuthentication HostbasedAuthentication dan menggunakan opsi from = pattern-list dalam file kunci. Opsi konfigurasi yang membutuhkan DNS termasuk menggunakan pola USER @ HOST di AllowUsers atau DenyUsers

-D

Ketika opsi ini ditentukan sshd tidak akan terlepas dan tidak menjadi daemon. Ini memungkinkan pemantauan ssh dengan mudah

-4

Memaksa sshd untuk menggunakan alamat IPv4 saja.

-6

Memaksa sshd untuk menggunakan alamat IPv6 saja.

File Konfigurasi

sshd membaca data konfigurasi dari / etc / ssh / sshd_config (atau file yang ditentukan dengan - f pada baris perintah). Format file dan opsi konfigurasi dijelaskan dalam sshd_config5.

Proses Login

Ketika seorang pengguna berhasil masuk, sshd melakukan hal berikut:

  1. Jika login pada tty, dan tidak ada perintah yang telah ditentukan, cetakan waktu login terakhir dan / etc / motd (kecuali dicegah dalam file konfigurasi atau dengan $ HOME / .hushlogin lihat bagian Sx FILES).
  2. Jika proses masuk menggunakan tty, catat waktu login.
  3. Cek / etc / nologin jika ada, mencetak konten dan berhenti (kecuali root).
  4. Berubah untuk berjalan dengan hak pengguna normal.
  5. Menyiapkan lingkungan dasar.
  6. Membaca $ HOME / .ssh / lingkungan jika ada dan pengguna diizinkan untuk mengubah lingkungannya. Lihat opsi PermitUserEnvironment di sshd_config5.
  7. Perubahan pada direktori home pengguna.
  8. Jika $ HOME / .ssh / rc ada, jalankan; lain jika / etc / ssh / sshrc ada, jalankan; sebaliknya menjalankan xauth. File `` rc '' diberikan protokol otentikasi X11 dan cookie dalam input standar.
  9. Menjalankan shell atau perintah pengguna.

Format File Authorized_Keys

$ HOME / .ssh / authorized_keys adalah file default yang mencantumkan kunci publik yang diizinkan untuk otentikasi RSA dalam versi protokol 1 dan untuk otentikasi kunci publik (PubkeyAuthentication) dalam versi protokol 2. AuthorizedKeysFile dapat digunakan untuk menentukan file alternatif.

Setiap baris file berisi satu kunci (baris kosong dan garis yang dimulai dengan `# 'diabaikan sebagai komentar). Setiap kunci publik RSA terdiri dari bidang-bidang berikut, dipisahkan oleh spasi: opsi, bit, eksponen, modulus, komentar. Setiap protokol versi 2 kunci publik terdiri dari: opsi, keytype, base64 encoded key, komentar. Bidang opsi opsional; kehadirannya ditentukan oleh apakah garis dimulai dengan angka atau tidak (bidang opsi tidak pernah dimulai dengan angka). Bidang bit, eksponen, modulus dan komentar memberikan kunci RSA untuk versi protokol 1; kolom komentar tidak digunakan untuk apa pun (tetapi mungkin nyaman bagi pengguna untuk mengidentifikasi kunci). Untuk protokol versi 2, tipe kunci adalah `` ssh-dss '' atau `` ssh-rsa ''

Perhatikan bahwa garis dalam file ini biasanya beberapa ratus byte panjangnya (karena ukuran pengkodean kunci publik). Anda tidak ingin mengetikkannya; sebagai gantinya, salin identitas.pub id_dsa.pub atau file id_rsa.pub dan edit.

sshd memberlakukan ukuran kunci minimum RSA kunci untuk protokol 1 dan protokol 2 kunci 768 bit.

Opsi (jika ada) terdiri dari spesifikasi opsi yang dipisahkan koma. Tidak ada tempat yang diizinkan, kecuali dalam tanda kutip ganda. Spesifikasi opsi berikut ini didukung (perhatikan bahwa kata kunci pilihan tidak peka terhadap huruf besar / kecil):

dari = daftar-pola

Menentukan bahwa selain otentikasi kunci publik, nama kanonis dari host jarak jauh harus ada dalam daftar pola yang dipisahkan koma (`* 'dan`?' Berfungsi sebagai wildcard). Daftar ini mungkin juga mengandung pola yang dinegasikan dengan awalan dengan `! ' ; jika nama host kanonis sesuai dengan pola yang dinegasikan, kuncinya tidak diterima. Tujuan dari opsi ini adalah untuk meningkatkan keamanan opsional: otentikasi kunci publik dengan sendirinya tidak mempercayai jaringan atau server nama atau apa pun (tetapi kuncinya); Namun, jika seseorang entah bagaimana mencuri kunci, kuncinya memungkinkan penyusup untuk masuk dari mana saja di dunia. Opsi tambahan ini menjadikan penggunaan kunci yang dicuri lebih sulit (server nama dan / atau router harus dikompromikan selain hanya kunci).

perintah = command

Menentukan bahwa perintah dijalankan setiap kali kunci ini digunakan untuk otentikasi. Perintah yang diberikan oleh pengguna (jika ada) diabaikan. Perintah dijalankan pada pty jika klien meminta pty; selain itu dijalankan tanpa tty. Jika saluran bersih 8-bit diperlukan, seseorang tidak harus meminta pty atau harus menentukan no-pty. Sebuah kutipan dapat dimasukkan dalam perintah dengan mengutipnya dengan backslash. Pilihan ini mungkin berguna untuk membatasi kunci publik tertentu untuk melakukan hanya operasi tertentu. Contohnya mungkin kunci yang memungkinkan backup jarak jauh tetapi tidak ada yang lain. Perhatikan bahwa klien dapat menentukan TCP / IP dan / atau X11 penerusan kecuali mereka secara eksplisit dilarang. Perhatikan bahwa opsi ini berlaku untuk eksekusi shell, command atau subsystem.

lingkungan = NAMA = nilai

Menentukan bahwa string harus ditambahkan ke lingkungan saat masuk menggunakan kunci ini. Variabel lingkungan yang ditetapkan dengan cara ini mengesampingkan nilai lingkungan default lainnya. Berbagai pilihan jenis ini diizinkan. Pemrosesan lingkungan dinonaktifkan secara default dan dikontrol melalui opsi PermitUserEnvironment . Opsi ini secara otomatis dinonaktifkan jika UseLogin diaktifkan.

tanpa port forwarding

Melarang TCP / IP meneruskan ketika kunci ini digunakan untuk otentikasi. Setiap permintaan port forward oleh klien akan mengembalikan kesalahan. Ini mungkin digunakan, misalnya, sehubungan dengan opsi perintah .

no-X11-forwarding

Melarang X11 meneruskan ketika kunci ini digunakan untuk otentikasi. Permintaan maju X11 apa pun oleh klien akan mengembalikan kesalahan.

no-agent-forwarding

Melarang agen otentikasi meneruskan ketika kunci ini digunakan untuk otentikasi.

tidak ada pty

Mencegah alokasi tty (permintaan untuk mengalokasikan pty akan gagal).

permitopen = host: port

Batasi local `` ssh -L '' port forwarding sedemikian rupa sehingga hanya dapat terhubung ke host dan port yang ditentukan. Alamat IPv6 dapat ditentukan dengan sintaks alternatif: host / port Beberapa opsi permitopen dapat diterapkan dipisahkan dengan koma. Tidak ada pencocokan pola dilakukan pada hostname yang ditentukan, mereka harus berupa domain atau alamat literal.

Contoh

1024 33 12121 ... 312314325 ylo@foo.bar

from = "*. niksula.hut.fi,! pc.niksula.hut.fi" 1024 35 23 ... 2334 ylo @ niksula

command = "dump / home", no-pty, no-port-forwarding 1024 33 23 ... 2323 backup.hut.fi

permitopen = "10.2.1.55:80", permitopen = "10.2.1.56:25" 1024 33 23 ... 2323

Ssh_Known_Hosts File Format

Berkas / etc / ssh / ssh_known_hosts dan $ HOME / .ssh / known_hosts berisi kunci publik tuan rumah untuk semua host yang dikenal. File global harus disiapkan oleh administrator (opsional), dan file per pengguna dipertahankan secara otomatis: setiap kali pengguna terhubung dari host yang tidak dikenal, kuncinya ditambahkan ke file per-pengguna.

Setiap baris dalam file-file ini berisi bidang-bidang berikut: hostname, bit, eksponen, modulus, komentar. Kolom dipisahkan oleh spasi.

Hostname adalah daftar pola yang dipisahkan koma ('*' dan '?' Bertindak sebagai wildcard); masing-masing pola, pada gilirannya, dicocokkan dengan nama host kanonik (saat mengautentikasi klien) atau terhadap nama yang diberikan pengguna (saat mengautentikasi server). Suatu pola juga dapat didahului oleh `! ' untuk menunjukkan negasi: jika nama host cocok dengan pola yang dinegasikan, itu tidak diterima (oleh garis itu) bahkan jika itu cocok dengan pola lain di telepon.

Bits, eksponen, dan modulus diambil langsung dari kunci host RSA; mereka dapat diperoleh, misalnya, dari /etc/ssh/ssh_host_key.pub Bidang komentar opsional berlanjut ke akhir baris, dan tidak digunakan.

Garis dimulai dengan `# 'dan garis kosong diabaikan sebagai komentar.

Ketika melakukan otentikasi host, otentikasi diterima jika ada garis yang cocok memiliki kunci yang tepat. Dengan demikian diperbolehkan (tetapi tidak disarankan) untuk memiliki beberapa baris atau kunci host yang berbeda untuk nama yang sama. Ini pasti akan terjadi ketika bentuk singkat dari nama host dari domain yang berbeda dimasukkan ke dalam file. Ada kemungkinan bahwa file-file tersebut mengandung informasi yang bertentangan; otentikasi diterima jika informasi yang valid dapat ditemukan dari file baik.

Perhatikan bahwa garis-garis dalam file-file ini biasanya ratusan karakter, dan Anda pasti tidak ingin mengetikkan kunci host dengan tangan. Sebaliknya, buat mereka dengan skrip atau dengan mengambil /etc/ssh/ssh_host_key.pub dan menambahkan nama host di depan.

Contoh

closenet, ..., 130.233.208.41 1024 37 159 ... 93 closenet.hut.fi cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ..... =

Lihat juga

scp (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, moduli (5), sshd_config5, sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen "Protokol SSH Arsitektur" draft-ietf-secsh-architecture-12.txt Januari 2002 bekerja dalam materi kemajuan

M. Friedl N. Provos WA Simpson "Diffie-Hellman Group Exchange untuk SSH Transport Layer Protocol" draft-ietf-secsh-dh-group-exchange-02.txt Januari 2002 bekerja dalam materi kemajuan

Penting: Gunakan perintah man ( % man ) untuk melihat bagaimana perintah digunakan pada komputer khusus Anda.