Remote ke Mesin Lain Tanpa Password Dengan Menggunakan Ssh-keygen

Friday, February 22nd, 2008

Password adalah hal yang sangat penting dalam melakukan autentikasi. Password ini digunakan untuk meyakinkan mesin/komputer bahwa yang memberikan password dengan benar adalah yang berhak mengakses aplikasi/sistem yang dilindungi oleh autentikasi tadi. Begitu juga jika kita melakukan remote ke mesin lain. Mesin yang diakses akan meminta password, dan jika password yang kita berikan salah maka kita tidak diizinkan melakukan remote ke mesin tersebut.

Jika mesin yang anda remote jumlahnya sedikit, memasukkan password bukan merupakan suatu masalah. Tapi jika mesin yang anda remote jumlahnya banyak, dan ini dilakukan secara berulang - ulang, maka memasukkan password bisa menjadi masalah baru dan juga hal yang sangat membosankan. Ditambah lagi kita harus mengigat password yang berbeda untuk setiap mesin.

Untuk mengatasi masalah tersebut kita bisa menggunakan aplikasi ssh-keygen. Dengan aplikasi ini kita bisa melakukan remote ke mesin lain melalui ssh tanpa harus memasukkan password. Aplikasi ini bukanlah hal yang baru bagi sistem administrator. Saya sendiri sudah lama menggunakan aplikasi ini (walaupun saya bukan seorang sistem administrator). Kebetulan kemarin saya harus menggunakan aplikasi ini kembali dan mengingatkan saya untuk menuliskannya di blog ini. Mudah - mudahan bisa menjadi petunjuk buat orang yang belum mengetahuinya. Berikut contoh penggunaan sederhana dari aplikasi ssh-keygen.

dolly@dolly:~$ ssh-keygen -t dsa

Maka akan menghasilkan keluaran berikut

Generating public/priva$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/dolly/.ssh/id_dsa):

Tekan enter lagi

Your identification has been saved in /home/dolly/.ssh/id_dsa.
Your public key has been saved in /home/dolly/.ssh/id_dsa.pub.
The key fingerprint is:
ee:48:13:ed:1f:49:45:14:10:a2:31:91:d5:d0:19:61 dolly@dolly

Sesuai dengan informasi di atas, ssh-keygen telah membuat file id_dsa dan id_dsa.pub di ~/.ssh. Salin file id_dsa.pub ke mesin tujuan dan ubah nama filenya menjadi authorized_keys.

dolly@dolly:~$ scp ~/.ssh/id_dsa.pub dolly@remote:~/.ssh/authorized_keys

Mesin tujuan akan meminta password untuk menerima file yang dikirim melalui scp. Karena kita sudah mempunyai file id_dsa.pub, maka untuk login ke mesin lain kita tinggal menyalin file tersebut ke mesin - mesin lainnya. Jika file sudah berhasil disalin ke mesin tujuan, maka anda sudah bisa melakukan remote ke mesin tujuan tanpa memasukkan password.

dolly@dolly:~$ ssh dolly@remote

Koq bisa login tanpa password?

Sewaktu kita mengirimkan request untuk melakukan remote ke mesin tujuan, maka ssh akan melakukan pengecekan antara data key yang ada di mesin lokal (~/.ssh/id_dsa) dengan key yang ada di mesin tujuan (~/.ssh/authorized_keys)

Anda bisa melakukan remote tanpa password ke mesin tujuan hanya terbatas pada mesin yang sudah anda buat file id_dsa nya saja. Jika anda melakukan remote ke mesin tujuan dari mesin lain, maka mesin tujuan akan tetap meminta password. Untuk itu anda harus membuat file id_dsa di setiap mesin yang anda gunakan untuk remote ke mesin tujuan. Untuk membuat file id_dsa, caranya sama dengan sebelumnya. Hanya saja cara menyalain file id_dsa.pub yang berbeda.

Untuk menyalin file id_dsa.pub ke mesin tujuan tidak bisa lagi menggunakan cara sebelumnya, karena cara itu akan mereplace/mengganti file authorized_keys yang sudah ada. Untuk menyalin file tersebut bisa menggunakan cara berikut:

dolly@office:~$ scp id_dsa.pub dolly@remote:~/.ssh/id_dsa.pub

dolly@office:~$ ssh dolly@remote

Mesin tujuan akan meminta password. Masukkan password, dan jika benar maka kita akan bisa masuk ke server tujuan

dolly@office:~$ echo ” ” >> ~/.ssh/authorized_keys
dolly@office:~$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

Logout dari mesin tujuan (ctrl + d), kemudian remote lagi ke mesin tujuan maka mesin tujuan tidak akan meminta password lagi.

dolly@office:~$ ssh dolly@remote

Dengan mengikuti petunjuk - petunjuk diatas, anda sudah bisa melakukan remote ke mesin lain tanpa password dengan menggunakan ssh. Untuk penggunaan yang lebih lanjut/advance, anda bisa membaca manual dari ssh-keygen.

Catatan:
Saya asumsikan di komputer anda sudah terinstall aplikasi ini, jika belum ada anda harus menginstallnya terlebih dahulu.

Lawan Pembabatan Hutan di Tele Sumatera Utara

Monday, February 18th, 2008

Jangan biarkan hutan kita terus dibabat!

Eksepsi dan Penanganan Kesalahan di PHP

Saturday, February 16th, 2008

PHP sudah mendukung eksepsi sejak dirilisnya PHP5. Eksepsi sendiri bertujuan agar kita bisa menentukan tipe dan isi dari pesan kesalahan. Jika kode program yang dibuat memenuhi kondisi untuk eksepsi tersebut, maka pesan kesalahan akan ditampilkan oleh interpreter PHP dan program akan berhenti (tidak memproses kode berikutnya).

Sama seperti bahasa pemrograman lain, PHP menyediakan penanganan terhadap eksepsi ini yaitu dengan blok try dan catch. Penanganan ini memungkinkan program akan terus berjalan walaupun ditemukan eksepsi. Untuk membuat eksepsi sendiri dapat dilakukan dengan statement throw.

Untuk lebih jelasnya bisa melihat kode berikut:

<?php
function tambah($nilai)0 
{
    if ($nilai < 1)
        throw new Exception("Pelit amat sih, "
                           ."masa dikasi nilai {$nilai}" . PHP_EOL);
 
    return "1 + {$nilai} = " . (1 + $nilai);
}
 
echo tambah(1), PHP_EOL;
echo tambah(0), PHP_EOL;
echo 'Selesai!', PHP_EOL;
?>

Jika kode diatas dijalankan maka akan memberikan pesan berikut:

1 + 1 = 2

“Fatal error: Uncaught exception ‘Exception’ with message ‘Pelit amat sih, masa dikasi nilai 0′”

Program akan berhenti sampai pemanggilan fungsi tambah(0) saja, karena menemukan eksepsi. Agar program bisa terus berjalan sampai akhir kode, maka dibutuhkan penanganan eksepsi. Berikut ini contoh penanganan eksepsi dengan blok try dan catch.

<?php
function tambah($nilai)
{
    if ($nilai < 1)
        throw new Exception("Pelit amat sih, "
                            ."masa dikasi nilai {$nilai}" . PHP_EOL);
 
    return "1 + {$nilai} = " . (1 + $nilai);
}
 
try {
    echo tambah(1), PHP_EOL;
    echo tambah(0), PHP_EOL;
} catch (Exception $e) {
    echo $e->getMessage();
}
 
echo 'Selesai!', PHP_EOL;
?>

Jika kode diatas dijalankan maka akan menghasilkan keluaran:

1 + 1 = 2
Pelit amat sih, masa dikasi nilai 0
Selesai!

Dari kode diatas dapat diambil kesimpulan bahwa interpreter menjalankan statement yang ada pada blok try, dan jika menemukan eksepsi maka interpreter akan menjalankan statement yang ada pada blok catch. Dan kemudian interpreter terus bekerja sampai kode paling akhir. Dengan kata lain kode diatas akan terus berjalan walaupun menemukan eksepsi pada pemanggilan fungsi tambah(0).

Contoh diatas adalah contoh penggunaan eksepsi yang sederhana. Untuk menggunakan eksepsi lebih lanjut anda bisa melihat referensi berikut.

Manipulasi Data Menggunakan Tabel Pada Database Lain di MySQL

Thursday, February 14th, 2008

MySQL mengizinkan kita untuk memanipulasi data menggunakan data dari database lain. Dengan catatan user kita memiliki akses ke database tersebut. Hal ini bisa dilakukan dengan menyertakan nama database di depan nama tabel. Berikut dua contoh untuk perintah SQL memanipulasi data dari database lain.

CREATE TABLE SELECT

CREATE TABLE  `tost`.`test` SELECT * FROM `test`.`test`
Hasil dari perintah SQL diatas akan membuat table test di database tost yang tabelnya itu (bentuk dan juga isinya) diduplikasi dari tabel test di datbase test.

UPDATE TABLE

UPDATE `tost`.`test`, `test`.`test`
SET `tost`.`test`.`text` = `test`.`test`.`text`
WHERE `tost`.`test`.`id` = `test`.`test`.`id`
Hasil dari perintah SQL diatas akan mengupdate isi field text di table test pada database tost agar sama dengan isi field text di table test pada database test.

Saya rasa kedua contoh perintah SQL diatas sudah cukup, dan mudah - mudahan postingan ini bisa menjawab pertanyaan berikut.