sebenernya proses ssh ke mirror dapat dipercepat dengan tanpa password. seiring bertambahnya mesin yang kita handle, bertambah pula record password yang ada di pikiran kita. apa yang terjadi jika ada banyak mesin dengan password yang berbeda2? yang paling mungkin saat salah masukin password, kita tanya teman yang lain atau melihat dokumentasi mesin dan password (kalo ada). dan itu pasti makan waktu entah 1-2 menit.

untuk efisiensi waktu, salah satu solusinya adalah penggunaan command ssh-copy-id. ssh-copy-id digunakan untuk mengopikan id yang ada id file [HOME_CLIENT]/ssh/id_rsa.pub ke mesin lain di path [HOME_SERVER]/.ssh/authorized_keys. setelah pengopian dilakukan, setiap kita melakukan dari [CLIENT] ke [SERVER] tidak akan diminta untuk memasukkan password lagi, kecuali id_rsa.pub-nya [CLIENT] yang dikopikan tadi dihapus dari [HOME_SERVER]/.ssh/authorized_keys.

untuk melakukan ssh-copy-id secara hampir bersamaan di seluruh mesin, bisa menggunakan suatu script. daftar ip mesin dan password bisa diletakkan di dalam 1 file (jika user yang kita punya di seluruh mesin sama).

berikut langkah2nya :

install library python-pexpect :

user@computer:$ sudo apt-get install python-pexpect

kemudian siapkan file ~/ipserver.txt yang berisi daftar ip mesin dan passwordnya :

192.168.1.10|password10
192.168.1.11|password11
192.168.1.12|password12

setelah itu, buat suatu file misalnya autossh.py di home folder dan isi dengan code berikut :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
 
ssh_newkey = 'Are you sure you want to continue connecting'
ip = open('~/ipserver.txt', 'r')
# my ssh command line
 
for b in ip:
	iplist		= b.split("|")
	passwordlist	= iplist[1].split("\n")
	ipaddress	= iplist[0]
	password	= passwordlist[0]
 
	p=pexpect.spawn('ssh-copy-id -i .ssh/id_rsa.pub user@' + ipaddress)
 
	i=p.expect([ssh_newkey,'password:',pexpect.EOF])
	if i==0:
		print "I say yes"
		p.sendline('yes')
		i=p.expect([ssh_newkey,'password:',pexpect.EOF])
	if i==1:
		print "I give password " + ipaddress + " " + password,
		p.sendline(password)
		i=p.expect([ssh_newkey,'password:',pexpect.EOF])
	elif i==2:
		print "I either got key or connection timeout"
		pass
	print p.before # print out the result
ip.close()

kemudian jalankan di terminal :

user@computer:$ python ~/autossh.py

udah gitu aja, sekarang coba ssh ke salah satu mesin yang ip-nya ada di ~/ipserver.txt. normalnya sih udah gak diminta masukkan password lagi.

source : http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/