SSH veya SCP nin birden fazla makinede çalıştırılması

Eğer sizde benim gibi birden fazla Debian GNU/Linux çalıştırıyorsanız ve zaman zaman tüm bu makineler için bir veya birkaç komutu çalıştırmanız gerekiyordur. Tüm makineler üzerinde aynı komutu çalıştırmanın çeşitli yolları vardır, tüm makinelere bağlanıp elle çalıştırmak gibi, veya daha karmaşık çözümleri kullanmak gibi; CFEngine veya Puppet. Bunların arasında yazdığınız tek komutu tüm makinlerde çalıştırmak için pssh kullanabilirsiniz.

pssh paketi size bu çözümü sunun bir araçtır, SSH bağlantılarını birden fazla makinede paralel olarak kullanmanıza izin veririr.

Debian paket deposunu araştırdığınızda benzer birçok çözümü görebilirsiniz:

me@home:~$ apt-cache search cluster ssh
clusterssh - administer multiple ssh or rsh shells simultaneously
dish - the diligence/distributed shell for parallel sysadmin
dsh - dancer's shell, or distributed shell
kanif - cluster management and administration swiss army knife
libtaktuk2 - C bindings for taktuk
libtaktuk2-dev - C bindings for taktuk (development files)
pssh - Parallel versions of SSH-based tools
taktuk - efficient, large scale, parallel remote execution of commands

Öncelikle pssh paketini yükleyelim. Bu paket ile birlikte birkaç yeni komut gelir.

# apt-get install pssh

parallel-slurp
Bu komut birden fazla uzak makineden dosyaların yerel sisteminize kopyalamınızı sağlar. Kısaca bunun kullanımını aşağıda göstereceğim.

parallel-ssh
Bu komut yerel makinenizde yazmış olduğunuz komutun paralel olarak uzak sistemlerde çalışmasını sağlar. Bunu komutunda kullanımını aşağıda kısaca göstereceğim.

parallel-nuke
Bu komut birden fazla uzak sistemde işlemlern öldürülmesini sağlar.

parallel-scp
Bu komut parallel-slurp ‘un tersidir ve birden fazla uzak sisteme dosya, veya dosyalar, kopyalamayı sağlar.

Genel Kullanım
pssh paketi ile birlikte yüklenen herbir yeni komut bir text dosyasnda bulunan listedeki makine isimlerini okur. Bu otomatik kullanım biraz komut-satırı çözümleme işlemini kolaylaştırmak için yapılmıştır.

Birden fazla makine üzerinde konut çalıştırılması
En basit kullanım; herbir makine üzerinde basitçe çalıştırmak ve rapor çıktısı almamaktır. Örneğin hosts.txt ,dosyada verilen numara ve makine ismi vardır, dosyasını çalıştırmak:

me@home:~$ parallel-ssh -h hosts.txt uptime

[1] 18:29:35 [SUCCESS] gold.my.flat 22
[2] 18:29:35 [SUCCESS] silver.my.flat 22

Bu komut “uptime” komut çıktısını bizim istediğimiz gibi bize göstermez. İstediğimiz gibi bir çıktı almak için “-i” (inline) flag (bayrak) eklememiz gerekmektedir:

me@home:~$ parallel-ssh -i -h hosts.txt uptime

[1] 18:30:29 [SUCCESS] gold.my.flat 22
 18:30:29 up 36 days,  5:21,  5 users,  load average: 0.39, 0.24, 0.23
[2] 18:30:29 [SUCCESS] silver.my.flat 22
 18:30:29 up 36 days,  4:45,  1 user,  load average: 0.04, 0.02, 0.00

En basit komutlar için  bu iyi bir çözümdür fakat bazı zaman mümkün olan tüm çıktıları toplamak istediğiniz zaman bu yeterli olmaz. Burada çıktı (output) parametresini de kullanmanız gerkmektedir. Basitçe çıktı (output) ” -o path” dir.  Herbir sistem için çıktılar aşağıdaki şekilde dosyaya yazılır.

me@home:~$ parallel-ssh -o uptime.out -h hosts.txt uptime

[1] 18:32:30 [SUCCESS] gold.my.flat 22
[2] 18:32:30 [SUCCESS] silver.my.flat 22
me@home:~$ ls uptime.output/
gold.my.flat  silver.my.flat
me@home:~$ cat uptime.out/silver.my.flat
 18:32:30 up 36 days,  4:47,  1 user,  load average: 0.00, 0.01, 0.00

Burada sizin kullanbileceğiniz birçok seçenek vardır. örneğin bağlanılan kullanıcı adları ve farklı port numaraları kullanımı gibi. Seçenekleri görmek için parallel-ssh komutunu hiçbir parametre olmadan kullanmanız yeterlidir.

Birden fazla makineden dosya kopyalanması
Kopyalanan dosyaların çalışması gösterdiğimiz komutların çalışması gibidir. Sadece farkı yerel dizini özellikle belirtmenizdir, böylelikle uzak sistemden kopyalanan dosya tekrar üzerine yazılmaz.

Böylece, /etc/motd dosyasını herbir  hosts.txt dosyamızdan kendi sistemimize kopyalayarak çalıştırırız.

me@home:~$ parallel-slurp -h hosts.txt  -L local.dir /etc/motd  motd
[1] 18:39:39 [SUCCESS] gold.my.flat 22
[2] 18:39:39 [SUCCESS] silver.my.flat 22

Bu bize /etc/motd dosyasını local.dir dizini içerisinde  motd adı ile adlandırarak kendi sistemimize kopyalar.

me@home:~$ tree local.dir/
local.dir/
|-- gold.my.flat
|   `-- motd
`-- silver.my.flat
    `-- motd

2 directories, 2 files

Yukarıda  gördüğünüz gibi kopyaladığımız yerdeki herbir makine adı için bir seviye alt kategori oluşturulmuştur.

Bu aracı verimli bir şekilde kullanmak için birçok seçenek vardır, biraz manuel dokumanına bakarak işinize yarayan birçok özelliği bulabilirsiniz, örneğin -r (recursive) seçeneği hepimizin scp kullanırken kullandığı, aşina olduğumuz bir parametredir.

UYARI: parallel-slurp sadece birden fazla makineden kendi makinenize kopyalama içindir. Birden fazla makineye kopya yapmak için parallel-scp aracını kullanınız.

Sonuç olarak bu araç hali hazırda SSH key tabanlı yetkilendirmye sahip birden fazla sistem yönetiminde kullanılabilir.