Monday, December 27, 2010

SSH Without a Password

Beberapa waktu yang lalu, aku terlibat dengan sebuah pekerjaan embedded programming dimana aku melakukan kompilasi program dan menjalankan executable filenya di SBC yang berbasis linux. Hal ini sedikit merepotkan karena setiap kali selesai compile aku harus mengcopy executable file dengan perintah scp yang meminta password setiap kali dieksekusi. Alangkah lebih mudah jika tahap ini bisa dipermudah karena proses kompilasi dan run dilakukan berulang-ulang. Setelah melakukan pencarian di internet, akhirnya aku menemukan cara untuk menghilangkan password ssh. Langkah-langkah agar bisa SSH tanpa password dijelaskan sebagai berikut.

  1. Pada client jalankan perintah untuk generate key berikut:
    $ mkdir -p $HOME/.ssh
    $ chmod 0700 $HOME/.ssh
    $ ssh-keygen -t dsa -f $HOME/.ssh/id_dsa -P ''
    Perintah ini menghasilkan dua file, $HOME/.ssh/id_dsa (private key) dan $HOME/.ssh/id_dsa.pub (public key).
  2. Copy $HOME/.ssh/id_dsa.pub ke server.
  3. Pada server jalankan perintah berikut:
    $ cat id_dsa.pub >> $HOME/.ssh/authorized_keys2
    $ chmod 0600 $HOME/.ssh/authorized_keys2
    Bergantung pada versi OpenSSH, kadang-kadang perintah berikut diperlukan:
    $ cat id_dsa.pub >> $HOME/.ssh/authorized_keys
    $ chmod 0600 $HOME/.ssh/authorized_keys
    Sebagai alternatif, buat sebuah link dari authorized_keys2 ke authorized_keys:
    $ cd $HOME/.ssh && ln -s authorized_keys2 authorized_keys
  4. Pada client test hasilnya dengan melakukan SSH ke server:
    $ ssh -i $HOME/.ssh/id_dsa server
  5. (Opsional) tambahkan line berikut pada $HOME/.ssh/config di client:
    Host server
           IdentityFile ~/.ssh/id_dsa
    Hal ini akan mengijinkan akses SSH ke server tanpa perlu menambahkan path ke file id_dsa sebagai sebuah argument setiap kali melakukan.
  6. Karena scp berbasis ssh, maka melakukan scp juga tidak perlu memasukkan password.
Setelah itu, aku bisa menambahkan line untuk copy executable file di bawah syntax kompilasi pada make file, sehingga copy setelah compile berlangsung secara otomatis.