Mengatasi SSH Push Gagal pada AI Agent karena Private Key Menggunakan Passphrase

·

Pendahuluan

Saya menemui kasus menarik saat menggunakan OpenCode sebagai AI coding agent. Repository sudah dikonfigurasi menggunakan SSH, tetapi setiap kali agent mencoba melakukan git push, proses selalu gagal. Setelah ditelusuri, ternyata penyebabnya bukan Git maupun GitHub, melainkan private key yang menggunakan passphrase sementara agent tidak mendukung input interaktif.

Saat menggunakan AI coding agent seperti OpenCode atau agent berbasis CLI lainnya, proses otomatis seperti git push terkadang gagal meskipun konfigurasi SSH sudah benar. Salah satu penyebab yang cukup sering ditemui adalah penggunaan SSH private key yang dilindungi dengan passphrase.

Pada komputer yang digunakan sehari-hari, kondisi ini biasanya tidak menjadi masalah karena SSH akan meminta pengguna memasukkan passphrase secara interaktif. Namun, berbeda halnya ketika perintah dijalankan oleh AI agent yang tidak memiliki mekanisme untuk menerima input interaktif.

Artikel ini membahas penyebab masalah tersebut serta solusi yang dapat diterapkan.


Studi Kasus

Sebuah AI agent diminta untuk melakukan perubahan kode dan menjalankan:

git push origin main

Namun proses gagal dengan pesan bahwa autentikasi SSH tidak dapat dilakukan. Setelah dilakukan pengecekan, diketahui bahwa:

  • Repository menggunakan autentikasi SSH.
  • Private key (id_ed25519) memiliki passphrase.
  • AI agent tidak dapat menampilkan prompt untuk meminta passphrase kepada pengguna.

Akibatnya, setiap kali SSH mencoba menggunakan private key tersebut, proses autentikasi berhenti karena menunggu input yang tidak pernah bisa diberikan.


Mengapa Hal Ini Terjadi?

SSH private key yang memiliki passphrase memang dirancang untuk meningkatkan keamanan. Saat pertama kali digunakan, SSH akan meminta pengguna memasukkan passphrase agar private key dapat didekripsi.

Pada sesi terminal biasa, alurnya adalah:

git push
        │
        ▼
SSH meminta passphrase
        │
        ▼
User memasukkan passphrase
        │
        ▼
Autentikasi berhasil

Sedangkan pada AI agent:

git push
        │
        ▼
SSH meminta passphrase
        │
        ▼
Tidak ada mekanisme input interaktif
        │
        ▼
Autentikasi gagal

Dengan kata lain, masalahnya bukan pada Git atau konfigurasi repository, melainkan karena agent tidak dapat merespons prompt yang muncul.


Solusi: Gunakan SSH Agent

Solusi yang direkomendasikan adalah menggunakan SSH Agent.

SSH Agent bertugas menyimpan private key yang sudah berhasil didekripsi. Passphrase hanya dimasukkan satu kali saat key dimuat ke agent. Setelah itu, semua aplikasi—including AI agent—dapat menggunakan key tersebut tanpa perlu meminta passphrase lagi.

Alurnya menjadi:

ssh-add id_ed25519
        │
        ▼
User memasukkan passphrase (sekali saja)
        │
        ▼
SSH Agent menyimpan key di memori
        │
        ▼
AI Agent menjalankan git push
        │
        ▼
SSH menggunakan key dari agent
        │
        ▼
Push berhasil

Konfigurasi SSH

Pastikan file ~/.ssh/config memiliki konfigurasi yang sesuai.

macOS

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

Kemudian tambahkan key ke SSH Agent:

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

Pada macOS versi lama:

ssh-add -K ~/.ssh/id_ed25519

Linux

Jalankan SSH Agent jika belum aktif:

eval "$(ssh-agent -s)"

Lalu tambahkan private key:

ssh-add ~/.ssh/id_ed25519

Passphrase hanya akan diminta satu kali ketika menjalankan ssh-add.


Memastikan SSH Agent Berjalan

Periksa apakah key sudah dimuat:

ssh-add -l

Jika berhasil, akan muncul fingerprint dari private key, misalnya:

256 SHA256:xxxxxxxxxxxxxxxx ~/.ssh/id_ed25519 (ED25519)

Apabila muncul:

The agent has no identities.

berarti private key belum dimuat ke SSH Agent.


Hasil

Setelah private key dimuat ke SSH Agent:

  • AI agent dapat menjalankan git push.
  • Tidak ada lagi permintaan memasukkan passphrase.
  • Autentikasi tetap menggunakan private key yang sama.
  • Keamanan tetap terjaga karena passphrase tidak dihapus dari private key.

Kesimpulan

Masalah kegagalan git push pada AI agent sering kali bukan disebabkan oleh konfigurasi Git maupun SSH yang salah, melainkan karena private key menggunakan passphrase sementara agent tidak mendukung input interaktif.

Menggunakan SSH Agent merupakan solusi yang tepat karena memungkinkan passphrase dimasukkan satu kali oleh pengguna, kemudian private key digunakan kembali oleh seluruh proses yang memerlukan autentikasi SSH, termasuk AI coding agent. Pendekatan ini menjaga keseimbangan antara keamanan dan kemudahan otomatisasi tanpa perlu menghapus passphrase dari private key.