DEV Community

Fega Suseno
Fega Suseno

Posted on Edited on

Distribute Public Key SSH

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Pada artikel ini kita akan membahas dua cara mendistribusikan public key:

  1. Manual
  2. Otomatis menggunakan ssh-copy-id

1. Generate SSH Key

Untuk membuat SSH Key, jalankan:

ssh-keygen -t rsa -b 4096
Enter fullscreen mode Exit fullscreen mode

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):
Enter fullscreen mode Exit fullscreen mode

Jika menggunakan lokasi default, key akan disimpan di:

~/.ssh/
├── id_rsa       # Private Key
└── id_rsa.pub   # Public Key
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Hasilnya:

~/.ssh/
├── server_backup
└── server_backup.pub
Enter fullscreen mode Exit fullscreen mode

Private key sebaiknya memiliki permission yang ketat:

chmod 600 ~/.ssh/id_rsa
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

pada server tujuan.

Misalnya public key berada di client:

~/.ssh/id_rsa.pub
Enter fullscreen mode Exit fullscreen mode

Kita bisa menyalinnya ke server menggunakan scp:

scp ~/.ssh/id_rsa.pub root@10.10.10.1:/tmp/id_rsa.pub
Enter fullscreen mode Exit fullscreen mode

Kemudian login ke server:

ssh root@10.10.10.1
Enter fullscreen mode Exit fullscreen mode

Pastikan direktori .ssh tersedia:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
Enter fullscreen mode Exit fullscreen mode

Kemudian tambahkan public key:

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

Atur permission:

chmod 600 ~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

Setelah itu hapus file sementara:

rm /tmp/id_rsa.pub
Enter fullscreen mode Exit fullscreen mode

Cara manual menggunakan copy-paste

Alternatifnya, dari client:

cat ~/.ssh/id_rsa.pub
Enter fullscreen mode Exit fullscreen mode

Copy seluruh baris yang dihasilkan.

Kemudian pada server:

nano ~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

4. Distribusi Otomatis dengan ssh-copy-id

Cara yang lebih praktis adalah menggunakan:

ssh-copy-id
Enter fullscreen mode Exit fullscreen mode

Contoh:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.10.1
Enter fullscreen mode Exit fullscreen mode

Jika SSH server menggunakan port berbeda, misalnya port 73:

ssh-copy-id -p 73 -i ~/.ssh/id_rsa.pub root@10.10.10.1
Enter fullscreen mode Exit fullscreen mode

Perintah tersebut akan menambahkan public key client ke:

~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

pada server tujuan.

Setelah selesai, lakukan pengujian:

ssh -i ~/.ssh/id_rsa root@10.10.10.1
Enter fullscreen mode Exit fullscreen mode

Jika menggunakan port 73:

ssh -p 73 -i ~/.ssh/id_rsa root@10.10.10.1
Enter fullscreen mode Exit fullscreen mode

5. Study Case: AWS EC2

Pada AWS EC2, kita biasanya membuat Key Pair ketika membuat instance.

Misalnya AWS memberikan file:

key-nzucode-ec.pem
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Kemudian koneksi ke EC2:

ssh -i key-nzucode-ec.pem ubuntu@108.14.165.117
Enter fullscreen mode Exit fullscreen mode

Perhatikan bahwa username tergantung image/AMI yang digunakan.

Contohnya:

Ubuntu      → ubuntu
Amazon Linux → ec2-user
RHEL        → ec2-user / root
Debian      → debian
Enter fullscreen mode Exit fullscreen mode

6. Jika AWS EC2 Tidak Bisa Login

Jika command berikut:

ssh -i key-nzucode-ec.pem ubuntu@108.14.165.117
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Command tersebut akan menghasilkan public key.

Contohnya:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
Enter fullscreen mode Exit fullscreen mode

Public key tersebut bisa ditambahkan ke:

~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Tambahkan public key pada baris baru.

Setelah itu:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

Kemudian dari client lakukan pengujian:

ssh -i key-nzucode-ec.pem ubuntu@108.14.165.117
Enter fullscreen mode Exit fullscreen mode

8. SSH Agent

Selain menggunakan:

ssh -i ~/.ssh/id_rsa user@server
Enter fullscreen mode Exit fullscreen mode

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)"
Enter fullscreen mode Exit fullscreen mode

Kemudian tambahkan private key:

ssh-add ~/.ssh/id_rsa
Enter fullscreen mode Exit fullscreen mode

Cek key yang sedang dimuat:

ssh-add -l
Enter fullscreen mode Exit fullscreen mode

Setelah itu kita bisa melakukan:

ssh user@server
Enter fullscreen mode Exit fullscreen mode

tanpa harus selalu menulis:

ssh -i ~/.ssh/id_rsa user@server
Enter fullscreen mode Exit fullscreen mode

9. SSH Config

Selain SSH Agent, kita juga bisa membuat konfigurasi SSH agar koneksi lebih praktis.

Buat file:

nano ~/.ssh/config
Enter fullscreen mode Exit fullscreen mode

Contoh:

Host simrs
    HostName 10.10.10.2
    User ayam
    IdentityFile ~/.ssh/id_rsa
Enter fullscreen mode Exit fullscreen mode

Permission:

chmod 600 ~/.ssh/config
Enter fullscreen mode Exit fullscreen mode

Sekarang kita tidak perlu lagi menulis:

ssh -i ~/.ssh/id_rsa ayam@10.10.10.2
Enter fullscreen mode Exit fullscreen mode

Cukup:

ssh simrs
Enter fullscreen mode Exit fullscreen mode

SSH akan menerjemahkan konfigurasi:

ssh simrs
   │
   ├── HostName → 10.10.10.2
   ├── User → ayam
   └── IdentityFile → ~/.ssh/id_rsa
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Kemudian cukup:

ssh simrs
Enter fullscreen mode Exit fullscreen mode

atau:

ssh backup
Enter fullscreen mode Exit fullscreen mode

atau:

ssh monitoring
Enter fullscreen mode Exit fullscreen mode

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/
Enter fullscreen mode Exit fullscreen mode

Atau:

ansible all -m ping
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Yang boleh didistribusikan:

✅ id_rsa.pub
✅ server_backup.pub
Enter fullscreen mode Exit fullscreen mode

Permission private key

chmod 600 ~/.ssh/id_rsa
Enter fullscreen mode Exit fullscreen mode

atau untuk key AWS:

chmod 400 key-nzucode-ec.pem
Enter fullscreen mode Exit fullscreen mode

Permission .ssh

chmod 700 ~/.ssh
Enter fullscreen mode Exit fullscreen mode

Permission authorized_keys

chmod 600 ~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

13. Ringkasan

CLIENT
│
├── Private Key
│     ~/.ssh/id_rsa
│
└── Public Key
      ~/.ssh/id_rsa.pub
              │
              │ distribute
              ▼
SERVER
│
└── ~/.ssh/authorized_keys
        │
        └── Public Key Client
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Command yang paling sering digunakan

Generate:

ssh-keygen -t rsa -b 4096
Enter fullscreen mode Exit fullscreen mode

Distribusi otomatis:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
Enter fullscreen mode Exit fullscreen mode

Login:

ssh -i ~/.ssh/id_rsa user@server
Enter fullscreen mode Exit fullscreen mode

Lihat public key:

cat ~/.ssh/id_rsa.pub
Enter fullscreen mode Exit fullscreen mode

Ambil public key dari private key:

ssh-keygen -y -f private_key
Enter fullscreen mode Exit fullscreen mode

SSH Agent:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
Enter fullscreen mode Exit fullscreen mode

Lihat key di agent:

ssh-add -l
Enter fullscreen mode Exit fullscreen mode

SSH Config:

nano ~/.ssh/config
Enter fullscreen mode Exit fullscreen mode

Login menggunakan alias:

ssh simrs
Enter fullscreen mode Exit fullscreen mode

Kesimpulan

SSH Key pada dasarnya menggunakan konsep key pair:

Private Key  → disimpan dan dirahasiakan di Client
Public Key   → didistribusikan ke Server
Enter fullscreen mode Exit fullscreen mode

Server menyimpan public key pada:

~/.ssh/authorized_keys
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Kemudian jika memiliki banyak server, gunakan:

~/.ssh/config
Enter fullscreen mode Exit fullscreen mode

agar koneksi cukup dilakukan dengan:

ssh nama-server
Enter fullscreen mode Exit fullscreen mode

Harusnya sudah bisa konek, semoga bermanfaat, selamat mencoba

Top comments (0)