Distribute Public SSH Key
Postingan kali ini membahas remote SSH dan distribusi public key SSH.
Sebenarnya, untuk terkoneksi ke server menggunakan SSH sangat sederhana:
ssh user@ipserver
Namun, pada beberapa kasus kita membutuhkan autentikasi menggunakan SSH Key agar client dapat terhubung ke server tanpa harus memasukkan password setiap kali melakukan koneksi.
Contohnya:
- Server ↔ Server
- Git ↔ Server
- Ansible ↔ Managed Host
- Jenkins ↔ Server
-
rsync↔ Server - Backup server ↔ Database server
Konsep sederhananya:
Client
│
│ Private Key
│
├─────────────── SSH ───────────────► Server
│ │
│ │ Public Key
│ ▼
│ ~/.ssh/authorized_keys
Pada artikel ini kita akan membahas dua cara mendistribusikan public key:
- Manual
- Otomatis menggunakan
ssh-copy-id
1. Generate SSH Key
Untuk membuat SSH Key, jalankan:
ssh-keygen -t rsa -b 4096
Saat dijalankan, biasanya akan muncul pertanyaan:
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Jika menggunakan lokasi default, key akan disimpan di:
~/.ssh/
├── id_rsa # Private Key
└── id_rsa.pub # Public Key
id_rsa adalah private key, sedangkan id_rsa.pub adalah public key.
Penting: Private key jangan pernah diberikan atau disalin ke server tujuan. Yang didistribusikan ke server adalah public key (
.pub).
Jika ingin menggunakan nama key lain:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/server_backup
Hasilnya:
~/.ssh/
├── server_backup
└── server_backup.pub
Private key sebaiknya memiliki permission yang ketat:
chmod 600 ~/.ssh/id_rsa
2. Distribusi Public Key
Ada dua cara umum:
- Manual
- Otomatis
A. Distribusi Manual
Secara manual, kita perlu menambahkan isi public key client ke:
~/.ssh/authorized_keys
pada server tujuan.
Misalnya public key berada di client:
~/.ssh/id_rsa.pub
Kita bisa menyalinnya ke server menggunakan scp:
scp ~/.ssh/id_rsa.pub root@10.10.10.1:/tmp/id_rsa.pub
Kemudian login ke server:
ssh root@10.10.10.1
Pastikan direktori .ssh tersedia:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Kemudian tambahkan public key:
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Atur permission:
chmod 600 ~/.ssh/authorized_keys
Setelah itu hapus file sementara:
rm /tmp/id_rsa.pub
Cara manual menggunakan copy-paste
Alternatifnya, dari client:
cat ~/.ssh/id_rsa.pub
Copy seluruh baris yang dihasilkan.
Kemudian pada server:
nano ~/.ssh/authorized_keys
Paste public key pada baris baru.
Simpan dan keluar.
3. Uji SSH Key
Dari client:
ssh -i ~/.ssh/id_rsa root@10.10.10.1
Jika public key sudah benar dan konfigurasi SSH server mengizinkannya, seharusnya client dapat login menggunakan key tersebut.
Jika private key menggunakan permission yang terlalu terbuka, perbaiki:
chmod 600 ~/.ssh/id_rsa
4. Distribusi Otomatis dengan ssh-copy-id
Cara yang lebih praktis adalah menggunakan:
ssh-copy-id
Contoh:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.10.1
Jika SSH server menggunakan port berbeda, misalnya port 73:
ssh-copy-id -p 73 -i ~/.ssh/id_rsa.pub root@10.10.10.1
Perintah tersebut akan menambahkan public key client ke:
~/.ssh/authorized_keys
pada server tujuan.
Setelah selesai, lakukan pengujian:
ssh -i ~/.ssh/id_rsa root@10.10.10.1
Jika menggunakan port 73:
ssh -p 73 -i ~/.ssh/id_rsa root@10.10.10.1
5. Study Case: AWS EC2
Pada AWS EC2, kita biasanya membuat Key Pair ketika membuat instance.
Misalnya AWS memberikan file:
key-nzucode-ec.pem
File .pem tersebut adalah private key.
Jangan pernah membagikan file tersebut.
AWS biasanya mensyaratkan permission private key yang ketat:
chmod 400 key-nzucode-ec.pem
Kemudian koneksi ke EC2:
ssh -i key-nzucode-ec.pem ubuntu@108.14.165.117
Perhatikan bahwa username tergantung image/AMI yang digunakan.
Contohnya:
Ubuntu → ubuntu
Amazon Linux → ec2-user
RHEL → ec2-user / root
Debian → debian
6. Jika AWS EC2 Tidak Bisa Login
Jika command berikut:
ssh -i key-nzucode-ec.pem ubuntu@108.14.165.117
tidak bisa login, jangan langsung menyimpulkan bahwa public key harus ditambahkan secara manual.
Pada EC2 yang baru dibuat, public key dari Key Pair biasanya sudah dipasang ke:
~/.ssh/authorized_keys
pada saat instance dibuat.
Periksa beberapa hal:
1. Username
Pastikan username sesuai dengan AMI.
2. Security Group
Pastikan port SSH terbuka, misalnya:
TCP 22
Source: IP client
3. Private key yang digunakan
Pastikan private key sesuai dengan Key Pair yang digunakan ketika instance dibuat.
4. Permission private key
chmod 400 key-nzucode-ec.pem
5. IP address
Pastikan menggunakan IP/public address instance yang benar.
7. Mengambil Public Key dari Private Key
Jika kita memiliki private key dan ingin mendapatkan public key-nya, bisa menggunakan:
ssh-keygen -y -f key-nzucode-ec.pem
Command tersebut akan menghasilkan public key.
Contohnya:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
Public key tersebut bisa ditambahkan ke:
~/.ssh/authorized_keys
Tetapi perlu diperhatikan:
Kita tetap membutuhkan akses ke server untuk menambahkan public key tersebut.
Misalnya kita sudah mempunyai akses melalui console, user lain, atau metode recovery.
Kemudian pada server:
nano ~/.ssh/authorized_keys
Tambahkan public key pada baris baru.
Setelah itu:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Kemudian dari client lakukan pengujian:
ssh -i key-nzucode-ec.pem ubuntu@108.14.165.117
8. SSH Agent
Selain menggunakan:
ssh -i ~/.ssh/id_rsa user@server
kita bisa menggunakan SSH Agent.
SSH Agent berfungsi menyimpan private key yang sudah kita unlock sehingga kita tidak perlu menentukan -i setiap kali menjalankan SSH.
Jalankan di sisi client/admin PC, bukan di server tujuan:
eval "$(ssh-agent -s)"
Kemudian tambahkan private key:
ssh-add ~/.ssh/id_rsa
Cek key yang sedang dimuat:
ssh-add -l
Setelah itu kita bisa melakukan:
ssh user@server
tanpa harus selalu menulis:
ssh -i ~/.ssh/id_rsa user@server
9. SSH Config
Selain SSH Agent, kita juga bisa membuat konfigurasi SSH agar koneksi lebih praktis.
Buat file:
nano ~/.ssh/config
Contoh:
Host simrs
HostName 10.10.10.2
User ayam
IdentityFile ~/.ssh/id_rsa
Permission:
chmod 600 ~/.ssh/config
Sekarang kita tidak perlu lagi menulis:
ssh -i ~/.ssh/id_rsa ayam@10.10.10.2
Cukup:
ssh simrs
SSH akan menerjemahkan konfigurasi:
ssh simrs
│
├── HostName → 10.10.10.2
├── User → ayam
└── IdentityFile → ~/.ssh/id_rsa
10. SSH Config untuk Beberapa Server
SSH config sangat berguna jika kita memiliki banyak server.
Contoh:
Host simrs
HostName 10.10.10.2
User ayam
IdentityFile ~/.ssh/id_rsa
Host backup
HostName 10.10.10.3
User backup
IdentityFile ~/.ssh/backup_key
Host monitoring
HostName 10.10.10.4
User monitoring
IdentityFile ~/.ssh/monitoring_key
Kemudian cukup:
ssh simrs
atau:
ssh backup
atau:
ssh monitoring
11. SSH Key untuk Automation
SSH Key sangat berguna untuk automation karena tool seperti:
- Ansible
- Jenkins
- Git
- rsync
- SCP
- Backup script
dapat melakukan koneksi tanpa memasukkan password secara interaktif.
Contoh:
rsync -avz /backup/ backup@10.10.10.3:/backup/
Atau:
ansible all -m ping
Dengan SSH key yang sudah dikonfigurasi, proses authentication dapat berlangsung otomatis.
12. Best Practice
Beberapa hal yang perlu diperhatikan:
Jangan pernah membagikan private key
❌ id_rsa
❌ server_backup
❌ key-nzucode-ec.pem
Yang boleh didistribusikan:
✅ id_rsa.pub
✅ server_backup.pub
Permission private key
chmod 600 ~/.ssh/id_rsa
atau untuk key AWS:
chmod 400 key-nzucode-ec.pem
Permission .ssh
chmod 700 ~/.ssh
Permission authorized_keys
chmod 600 ~/.ssh/authorized_keys
13. Ringkasan
CLIENT
│
├── Private Key
│ ~/.ssh/id_rsa
│
└── Public Key
~/.ssh/id_rsa.pub
│
│ distribute
▼
SERVER
│
└── ~/.ssh/authorized_keys
│
└── Public Key Client
Prosesnya:
1. Generate Key
↓
2. Simpan Private Key di Client
↓
3. Distribusikan Public Key ke Server
↓
4. Public Key masuk authorized_keys
↓
5. SSH menggunakan Private Key
↓
6. Server memverifikasi pasangan key
↓
7. Login berhasil
Command yang paling sering digunakan
Generate:
ssh-keygen -t rsa -b 4096
Distribusi otomatis:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
Login:
ssh -i ~/.ssh/id_rsa user@server
Lihat public key:
cat ~/.ssh/id_rsa.pub
Ambil public key dari private key:
ssh-keygen -y -f private_key
SSH Agent:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
Lihat key di agent:
ssh-add -l
SSH Config:
nano ~/.ssh/config
Login menggunakan alias:
ssh simrs
Kesimpulan
SSH Key pada dasarnya menggunakan konsep key pair:
Private Key → disimpan dan dirahasiakan di Client
Public Key → didistribusikan ke Server
Server menyimpan public key pada:
~/.ssh/authorized_keys
Sedangkan client menggunakan private key untuk membuktikan bahwa ia memiliki pasangan dari public key tersebut.
Untuk penggunaan sehari-hari, workflow yang paling praktis biasanya:
ssh-keygen -t ed25519
ssh-copy-id user@server
ssh user@server
Kemudian jika memiliki banyak server, gunakan:
~/.ssh/config
agar koneksi cukup dilakukan dengan:
ssh nama-server
Harusnya sudah bisa konek, semoga bermanfaat, selamat mencoba
Top comments (0)