Beberapa waktu yang lalu penulis mengujicoba Ansible pada sistem operasi CentOS 8 untuk mengeksplorasi materi tentang Network Automation. Versi Ansible yang penulis gunakan adalah 2.9.11.
Hasil ujicoba eksekusi salah satu Playbook, sebagai contoh dengan nama routeros_resource.yml
menggunakan perintah ansible-playbook routeros_resource.yml
memperlihatkan task gagal dieksekusi.
Pesan kesalahan yang muncul adalah “ansible.module_utils.connection.ConnectionError: not a valid RSA private key file“. Selama ini penulis menggunakan Ansible di CentOS 7 dan playbook tersebut berhasil dieksekusi.
Akhirnya penulis melakukan troubleshooting permasalahan tersebut. Setelah melalui proses investigasi maka dapat diketahui penyebab munculnya permasalahan tersebut karena private key yang dihasilkan oleh OpenSSH di CentOS 8 menggunakan format key OpenSSH. Hal tersebut dapat diketahui dengan melihat konten dari private key file, sebagai contoh dengan nama id_rsa
yang terdapat di direktori .ssh
yaitu dengan mengeksekusi perintah cat .ssh/id_rsa
.
Sedangkan cuplikan bagian akhir dari konten private key file tersebut adalah:
Terlihat bagian awal dari konten private key file tersebut memuat -----BEGIN OPENSSH PRIVATE KEY-----
. Sedangkan pada bagian akhirnya memuat -----END OPENSSH PRIVATE KEY-----
. Hal tersebut mengindikasikan bahwa format private key file yang digunakan adalah OPENSSH.
Sebagai informasi mulai OpenSSH versi 7.8 secara default format untuk private key menggunakan OpenSSH dimana biasanya menggunakan PEM. Untuk mengetahui versi OpenSSH yang digunakan pada sistem maka dapat mengeksekusi perintah ssh -V
.
Terlihat bahwa CentOS 8 menggunakan OpenSSH versi 8.0p1.
Solusi untuk mengatasi permasalahan yang dihadapi adalah dengan mengubah format private key dari OpenSSH menjadi PEM. Hal tersebut dapat dilakukan dengan mengeksekusi perintah ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
.
Tekan Enter pada inputan “Enter new passphrase (empty for no passphrase):” dan “Enter same passphrase again:” yang tampil, apabila ingin mengosongkan passphrase. Parameter -p digunakan untuk menentukan passphrase dari private key file. Sedangkan parameter -m digunakan untuk mengatur format dari key file yaitu PEM. Terakhir parameter -f digunakan untuk menentukan path dan nama dari key file , sebagai contoh ~/.ssh/id_rsa
.
Hasil perubahan format private key file dapat diverifikasi dengan mengeksekusi perintah cat .ssh/id_rsa
.
Sedangkan cuplikan bagian akhir dari konten private key file tersebut adalah:
Terlihat bagian awal dari konten private key file tersebut telah berubah menjadi -----BEGIN RSA PRIVATE KEY-----
. Sedangkan pada bagian akhirnya berubah menjadi -----END RSA PRIVATE KEY-----
.
Lakukan verifikasi hasil dari perbaikan yang telah dilakukan yaitu dengan mengeksekusi kembali file playbook, sebagai contoh dengan nama routeros_resource.yml
menggunakan perintah ansible-playbook routeros_resource.yml
.
Terlihat playbook tersebut berhasil dieksekusi.
Selamat rekan-rekan telah berhasil mengatasi permasalahan Ansible Connection Error not a valid RSA private key file. Apabila terdapat pertanyaan, jangan segan mengomentari posting ini atau mengirimkan melalui email admin[at]iputuhariyadi.net. Semoga bermanfaat. Terimakasih.