Ringkasan
Sering kali kita perlu bekerja dengan sistem Linux jarak jauh. Kami masuk ke host jarak jauh, melakukan pekerjaan dan keluar dari sesi itu. Bisakah kita melakukan semua tindakan ini dari mesin lokal? Ya, itu mungkin dan tutorial ini menunjukkannya dengan contoh yang lengkap.
Eksekusi perintah melalui SSH
SSH memungkinkan kita untuk menjalankan perintah pada mesin jarak jauh tanpa masuk ke mesin itu. Dalam tutorial ini kita akan membahas berbagai cara untuk mencapainya.
Jalankan satu perintah
Mari kita jalankan perintah uname melalui SSH.
$ ssh [email protected] uname
Jika Anda mengamati perintah di atas, itu mirip dengan perintah SSH biasa dengan perbedaan kecil. Kami telah menambahkan perintah untuk dieksekusi (disorot dengan warna merah).
Ketika kita menjalankan perintah ini. Ini akan menghasilkan output di bawah ini:
Linux
Jalankan beberapa perintah
Dengan menggunakan teknik ini, kita dapat menjalankan beberapa perintah menggunakan sesi SSH tunggal. Kita hanya perlu memisahkan perintah dengan titik koma (;).
$ ssh [email protected] "uname;hostname;date"
Seperti yang diharapkan, perintah ini akan menghasilkan output di bawah ini:
Linux linux-server Thu Mar 1 15:47:59 IST 2018
Jalankan perintah dengan hak istimewa yang lebih tinggi
Terkadang kita perlu menjalankan perintah dengan hak istimewa yang lebih tinggi, dalam hal ini kita dapat menggunakannya dengan sudo.
$ ssh -t [email protected] sudo touch /etc/banner.txt
Perhatikan bahwa kami telah menggunakan ‘-t ' dengan SSH, yang memungkinkan alokasi terminal semu. perintah sudo membutuhkan terminal interaktif maka opsi ini diperlukan.
Jalankan skrip
Eksekusi jarak jauh tidak hanya terbatas pada perintah; kita bahkan dapat mengeksekusi skrip melalui SSH. Kita hanya perlu menyediakan path absolut dari skrip lokal ke perintah SSH.
Mari kita buat skrip shell sederhana dengan konten berikut dan beri nama sebagai system-info.sh
#!/bin/sh uname hostname
Jadikan skrip dapat dieksekusi dan jalankan di server jauh sebagai berikut:
$ chmod +x system-info.sh $ ssh [email protected] ./system-info.sh
Seperti yang mungkin sudah Anda duga, itu akan menghasilkan output di bawah ini:
Linux linux-server
Masalah ekspansi variabel
Jika kita membagi perintah menjadi beberapa baris, maka ekspansi variabel tidak akan berfungsi. Mari kita lihat dengan contoh sederhana:
$ msg="Hello LinuxTechi" $ ssh [email protected] 'echo $msg'
Ketika kita menjalankan perintah di atas, kita dapat mengamati bahwa variabel tidak diperluas.
Untuk mengatasi masalah ini, kita perlu menggunakan -c pilihan cangkang. Dalam kasus kami, kami akan menggunakannya dengan bash sebagai berikut:
$ ssh [email protected] bash -c "'echo $msg'"
Konfigurasikan sesi SSH tanpa kata sandi
Secara default, SSH akan meminta otentikasi kata sandi setiap kali. Ini diberlakukan untuk alasan keamanan. Namun, terkadang itu menjengkelkan. Untuk mengatasinya, kita dapat menggunakan mekanisme autentikasi kunci publik-pribadi.
Itu dapat dikonfigurasi menggunakan langkah-langkah berikut:
1) Buat pasangan kunci publik-swasta
SSH menyediakan utilitas ssh-keygen yang dapat digunakan untuk menghasilkan pasangan kunci pada mesin lokal.
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/linuxtechi/.ssh/id_rsa): #press enter Enter passphrase (empty for no passphrase): #press enter Enter same passphrase again: #press enter Your identification has been saved in /home/linuxtechi/.ssh/id_rsa. Your public key has been saved in /home/linuxtechi/.ssh/id_rsa.pub.
Keluaran di atas menunjukkan bahwa pasangan kunci yang dihasilkan disimpan di bawah direktori ~/.ssh.
2) Tambahkan kunci publik ke file ~/.ssh/authorized_keys di host jarak jauh
Cara sederhana untuk melakukannya adalah, menggunakan perintah ssh-copy-id.
$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
Pada perintah di atas:
- -opsi i menunjukkan file identitas
- ~/.ssh/id_rsa.pub adalah file identitas
- teks yang tersisa adalah pengguna jarak jauh dan IP server jarak jauh
CATATAN: Jangan pernah membagikan kunci pribadi Anda kepada siapa pun.
3) Itu saja. Bukankah ini sangat sederhana? Sekarang kita dapat menjalankan perintah melalui SSH tanpa memasukkan kata sandi. Biarkan kami memverifikasi ini.
$ ssh [email protected] uname
Batasan autentikasi kunci publik-swasta
Pemikiran otentikasi kunci publik-swasta membuat hidup kita lebih mudah, itu tidak sempurna. Kelemahan utamanya adalah; kami tidak dapat mengotomatiskannya, karena interaksi pengguna diperlukan pertama kali. Ingat !!! kami telah memberikan kata sandi untuk perintah ssh-copy-id.
Tidak perlu panik, ini bukan akhir dunia. Di bagian selanjutnya kita akan membahas pendekatan yang menghilangkan batasan ini.
utilitas sshpass
Untuk mengatasi batasan di atas, kita dapat menggunakan utilitas sshpass. Ini menyediakan cara non-interaktif untuk mengotentikasi sesi SSH. Bagian ini membahas berbagai cara.
Instalasi sshpass
Utilitas sshpass adalah bagian dari repositori resmi Ubuntu. Kita dapat menginstalnya menggunakan perintah berikut:
$ sudo apt-get update $ sudo apt-get install sshpass
Contoh
sshpass dapat menerima kata sandi – sebagai argumen, membacanya dari file atau melalui variabel lingkungan. Mari kita bahas semua pendekatan ini.
1) Kata sandi sebagai argumen
Kami dapat memberikan, kata sandi sebagai argumen menggunakan opsi –p:
$ sshpass -p 'secrete-password' ssh [email protected] uname
2) Kata sandi dari file
sshpass dapat membaca kata sandi dari file biasa menggunakan opsi -f:
$ echo "secrete-password" > password-file $ sshpass -f password-file ssh [email protected] uname
3) Kata sandi dari variabel lingkungan
Selain itu, kami dapat memberikan kata sandi dari variabel lingkungan menggunakan opsi -e:
$ export SSHPASS="secrete-password" $ sshpass -e ssh [email protected] uname
Kesimpulan
Tutorial ini menunjukkan berbagai trik dan tip tentang eksekusi perintah jarak jauh melalui SSH. Setelah Anda memahami trik-trik ini, itu akan membuat hidup Anda lebih mudah dan pasti meningkatkan produktivitas Anda.
Baca Juga : 9 Contoh Perintah 'diff' di Linux