Penjelasan SSH StrictModes, Agent Forwarding (ssh -A), dan ssh -a
SSH StrictModes menolak kunci jika home, ~/.ssh, atau authorized_keys dapat ditulis orang lain; perbaiki dengan chmod. Hindari ssh -A di host yang tidak tepercaya; ssh -a menonaktifkannya.
Singkatnya: `StrictModes yes` (default OpenSSH) membuat sshd memeriksa kepemilikan dan izin direktori home, `~/.ssh`, dan `~/.ssh/authorized_keys` sebelum menerima kunci, dan menolak login dengan "Authentication refused: bad ownership or modes" jika salah satunya dapat ditulis oleh group atau pengguna lain, atau dimiliki pengguna lain. Perbaiki izinnya alih-alih menonaktifkan pemeriksaan. Agent forwarding dengan `ssh -A` memungkinkan host jarak jauh memakai kunci lokal Anda selama Anda terhubung, jadi hindari di host yang tidak sepenuhnya Anda percayai dan gunakan `ssh -J` (ProxyJump) sebagai gantinya; `ssh -a` huruf kecil secara eksplisit menonaktifkan agent forwarding.
Panduan ini melengkapi panduan hardening SSH dan berlaku untuk Debian 12/13, Ubuntu 24.04, dan sistem keluarga RHEL seperti AlmaLinux 9 dan Rocky 9.
Apa yang diperiksa SSH StrictModes
StrictModes adalah pengaturan sisi server di `/etc/ssh/sshd_config`. Tujuannya sederhana: jika pengguna lain bisa menulis ke `authorized_keys` Anda, mereka bisa menambahkan kunci sendiri dan login sebagai Anda. Karena itu sshd menolak memercayai file tersebut kecuali seluruh path-nya terlindungi. Ia memeriksa file dan direktori di atasnya, termasuk direktori home.
Pastikan nilai yang berlaku dengan `sshd -T | grep -i strictmodes`. Di Ubuntu 24.04 dan Debian 13, periksa juga file drop-in di `/etc/ssh/sshd_config.d/`.
| Path | Syarat StrictModes | Mode yang disarankan |
|---|---|---|
| /home/alice | Dimiliki alice atau root, tidak dapat ditulis group/world | 755, 750, atau 700 |
| /home/alice/.ssh | Dimiliki alice atau root, tidak dapat ditulis group/world | 700 |
| /home/alice/.ssh/authorized_keys | Dimiliki alice atau root, tidak dapat ditulis group/world | 600 |
| /root dan /root/.ssh (login root) | Dimiliki root, tidak dapat ditulis group/world | 700 |
Memperbaiki "Authentication refused: bad ownership or modes"
Klien hanya menampilkan pesan umum `Permission denied (publickey)`. Alasan sebenarnya ada di log server, yang menyebut path persisnya, misalnya `Authentication refused: bad ownership or modes for directory /home/alice` atau `... for file /home/alice/.ssh/authorized_keys`. Gunakan konsol VPS atau sesi lain untuk memperbaikinya.
- 01.Baca log: `journalctl -u ssh -n 50` di Debian dan Ubuntu, atau `journalctl -u sshd -n 50` di AlmaLinux dan Rocky.
- 02.Perbaiki kepemilikan direktori SSH pengguna: `chown -R alice:alice /home/alice/.ssh`.
- 03.Perbaiki mode: `chmod 700 /home/alice/.ssh` dan `chmod 600 /home/alice/.ssh/authorized_keys`.
- 04.Hapus izin tulis group dan world dari direktori home: `chmod go-w /home/alice`.
- 05.Di sistem SELinux (AlmaLinux, Rocky, Fedora), pulihkan label: `restorecon -Rv /home/alice/.ssh`.
- 06.Uji dari terminal baru dengan `ssh -v alice@server` sambil tetap membuka sesi yang berfungsi.
# all-in-one, run as root on the server
chown -R alice:alice /home/alice/.ssh
chmod go-w /home/alice
chmod 700 /home/alice/.ssh
chmod 600 /home/alice/.ssh/authorized_keys
namei -l /home/alice/.ssh/authorized_keys # shows owner and mode of every path componentNote · Jangan set `StrictModes no` hanya agar error hilang. Itu menghapus perlindungan nyata dan menyembunyikan kesalahan konfigurasi alih-alih memperbaikinya.
StrictModes vs StrictHostKeyChecking
Pencarian "ssh strictmode" sering mencampuradukkan dua opsi yang tidak berkaitan. `StrictModes` berada di `sshd_config` di server dan memeriksa izin file. `StrictHostKeyChecking` berada di `ssh_config` atau `~/.ssh/config` di klien dan mengatur apa yang terjadi saat host key server tidak dikenal atau berubah. Klien juga punya pemeriksaan izin sendiri: ia menolak memakai private key yang dapat dibaca pengguna lain, dengan peringatan tentang file private key yang tidak terlindungi; `chmod 600 ~/.ssh/id_ed25519` memperbaikinya.
Agent forwarding dengan ssh -A: risikonya
`ssh -A` (atau `ForwardAgent yes`) membuat socket di host jarak jauh, dirujuk oleh `$SSH_AUTH_SOCK`, yang meneruskan permintaan penandatanganan kembali ke ssh-agent di mesin Anda. Private key Anda tidak pernah meninggalkan mesin Anda, tetapi siapa pun yang bisa mengakses socket itu dapat memakai kunci Anda selama Anda terhubung. Di host jarak jauh, itu termasuk root dan setiap proses yang berjalan sebagai user Anda.
Jika server disusupi, atau dikelola orang lain, penyerang dapat diam-diam login ke setiap host lain yang bisa dibuka kunci Anda, termasuk hosting Git dan server produksi. Itulah sebabnya klien OpenSSH secara default memakai `ForwardAgent no`.
- ▹Jangan pernah meneruskan agent ke host bersama, milik pihak ketiga, atau yang baru diinstal ulang dan belum Anda perkuat.
- ▹Jika terpaksa meneruskan, gunakan `ssh-add -c` agar setiap pemakaian kunci membutuhkan konfirmasi lokal.
- ▹OpenSSH 8.9 ke atas mendukung batasan tujuan dengan `ssh-add -h`, yang membatasi host mana saja yang boleh memakai kunci yang diteruskan.
- ▹Di sisi server, `AllowAgentForwarding no` di `sshd_config` menonaktifkannya, meskipun pengguna dengan akses shell tetap bisa membuat forwarder sendiri.
Pilih ProxyJump (ssh -J) untuk bastion
Sebagian besar agent forwarding dipakai untuk melompat melalui bastion ke mesin internal. `ssh -J` melakukannya tanpa mengekspos agent Anda: bastion hanya meneruskan stream TCP terenkripsi, dan autentikasi ke host internal terjadi end-to-end dari laptop Anda. Untuk server yang hanya dapat dijangkau lewat jaringan privat, tunnel WireGuard adalah opsi lain; lihat panduan VPN WireGuard atau panduan mesh WireGuard, dan untuk pengaturan keepalive dan PSK lihat panduan tuning WireGuard ini.
Di VPS NoctisNode Anda mendapat root penuh lewat SSH di mesin KVM, sehingga paket Wisp yang kecil dapat berfungsi sebagai jump host khusus tanpa menjalankan apa pun lainnya; lihat paket VPS.
# one-off
ssh -J [email protected] [email protected]
# ~/.ssh/config
Host bastion
HostName bastion.example.com
User alice
ForwardAgent no
Host db1
HostName 10.88.0.3
User alice
ProxyJump bastionApa fungsi ssh -a (huruf kecil)
`ssh -a` huruf kecil menonaktifkan agent forwarding untuk koneksi tersebut, kebalikan dari `-A`. Ini berguna saat `~/.ssh/config` Anda mengaktifkan `ForwardAgent` untuk host wildcard dan Anda ingin memastikan satu koneksi tertentu tidak meneruskan agent, misalnya `ssh -a admin@untrusted-host`. Jangan keliru dengan `ssh-agent -a`, yang mengatur path socket agent, atau `ssh-add`, yang memuat kunci ke agent.
FAQ
QApa fungsi StrictModes di sshd_config?
AOpsi ini membuat sshd memeriksa bahwa direktori home pengguna, ~/.ssh, dan authorized_keys dimiliki oleh pengguna atau root dan tidak dapat ditulis oleh group atau pengguna lain. Jika pemeriksaan gagal, autentikasi kunci ditolak.
QBagaimana cara memperbaiki Authentication refused: bad ownership or modes?
AJalankan `chmod go-w ~`, `chmod 700 ~/.ssh`, dan `chmod 600 ~/.ssh/authorized_keys`, dan pastikan file-file tersebut dimiliki pengguna. Log server menyebut path persis yang salah.
QApakah agent forwarding ssh -A aman?
AHanya di host yang sepenuhnya Anda percayai. Selama Anda terhubung, root atau akun yang disusupi di host jarak jauh dapat memakai agent yang Anda teruskan untuk melakukan autentikasi sebagai Anda di tempat lain; gunakan `ssh -J` sebagai gantinya.
QApa perbedaan ssh -A dan ssh -a?
A`-A` huruf besar mengaktifkan penerusan ssh-agent Anda ke host jarak jauh. `-a` huruf kecil menonaktifkan agent forwarding untuk koneksi itu, mengesampingkan `ForwardAgent yes` di konfigurasi Anda.
QHaruskah saya set StrictModes no?
ATidak. Menonaktifkannya mengizinkan login bahkan saat pengguna lain bisa mengubah authorized_keys Anda, yang merupakan celah keamanan nyata; perbaiki kepemilikan dan izinnya.