Kirjoittaja Aihe: Ssh-ohjelma / scripti yhden ssh-yhteyden avaamiseen usealle koneelle?  (Luettu 4300 kertaa)

Ville Pöntinen

  • Käyttäjä
  • Viestejä: 2078
    • Profiili

Tervehdys!

Onko ssh:lla mahdollista ottaa yhdellä komennolla yhteys useaan koneeseen kerralla ja syöttää sitten tietty komento kaikille koneille?

"Kohdekoneissa" on opensshserver päällä, ubuntu 6.06 ja kaikissa sama käyttäjätunnus, jolla kirjautuisin. Tiedättekö ohjelmaa tai openssh:n keinoa tehdä tällaista?

mk1970

  • Käyttäjä
  • Viestejä: 213
    • Profiili

Tervehdys!

Onko ssh:lla mahdollista ottaa yhdellä komennolla yhteys useaan koneeseen kerralla ja syöttää sitten tietty komento kaikille koneille?

"Kohdekoneissa" on opensshserver päällä, ubuntu 6.06 ja kaikissa sama käyttäjätunnus, jolla kirjautuisin. Tiedättekö ohjelmaa tai openssh:n keinoa tehdä tällaista?

Ei yhdellä kertaa mutta kelpaako tälläinen (talleta oheinen tiedostoksi ja anna chmod 755 tiedostonnimi antaaksesi ajo-oikeudet sille):

Koodia: [Valitse]
#!/bin/sh

for i in kone1 kone2 kone3
do
  ssh ${i} komento
done

Yllä oleva siis ottaa yksi kerrallaan yhteyden kolmeen eri koneeseen ja ajaa niissä saman komennon.

mk1970

  • Käyttäjä
  • Viestejä: 213
    • Profiili
Ja jotta yllä oleva toimii järkevästi niin kannattaa käyttää DSA-avaimia (ilman salasanasuojausta) autentikointiin jotta ei tarvitse antaa salasanaa joka koneelle. Eli siis jotain tämän tyylistä siinä koneessa tehtynä jossa tuo skripti ajetaan:

Koodia: [Valitse]
# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/xxx/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xxx/.ssh/id_dsa.
Your public key has been saved in /home/xxx/.ssh/id_dsa.pub.
The key fingerprint is:
f4:68:75:47:4d:7a:64:9d:c8:62:ae:35:41:34:31:5e xxx@kone

# scp .ssh/id_dsa.pub kone1:.ssh/authorized_keys
# scp .ssh/id_dsa.pub kone2:.ssh/authorized_keys
# scp .ssh/id_dsa.pub kone3:.ssh/authorized_keys

Ville Pöntinen

  • Käyttäjä
  • Viestejä: 2078
    • Profiili

Koodia: [Valitse]
#!/bin/sh

for i in kone1 kone2 kone3
do
  ssh ${i} komento
done

Yllä oleva siis ottaa yksi kerrallaan yhteyden kolmeen eri koneeseen ja ajaa niissä saman komennon.

Jääkö tuo odottamaan kunnes kone1 on suorittanut komennon ennenkuin ottaa yhteyttä koneeseen kone2? Jos jää, niin ei sovi mun tarkoitukseen  :-\



Ja jotta yllä oleva toimii järkevästi niin kannattaa käyttää DSA-avaimia (ilman salasanasuojausta) autentikointiin jotta ei tarvitse antaa salasanaa joka koneelle. Eli siis jotain tämän tyylistä siinä koneessa tehtynä jossa tuo skripti ajetaan:

Koodia: [Valitse]
# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/xxx/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xxx/.ssh/id_dsa.
Your public key has been saved in /home/xxx/.ssh/id_dsa.pub.
The key fingerprint is:
f4:68:75:47:4d:7a:64:9d:c8:62:ae:35:41:34:31:5e xxx@kone

# scp .ssh/id_dsa.pub kone1:.ssh/authorized_keys
# scp .ssh/id_dsa.pub kone2:.ssh/authorized_keys
# scp .ssh/id_dsa.pub kone3:.ssh/authorized_keys


Tätä en ymmärtänyt? Pitää kokeilla... Siis tuon tekeminen _vain_ sillä koneella, josta yhteydet otetaan, riittäisi?

Eräässä aiemmassa ketjussa T.M kirjoitti:

Lisäksi on olemassa "ohjelma" jolla voi suorittaa terminaalikomennot ssh:n yli monella sadalla koneella yhdellä kertaa. Tätä voi käyttää hätätapauksissa esim. vihoittelevien pakettien poistossa tai erikoisempien päivitysten teossa. (En nyt löytänyt freshmeat:stä tätä programmia, joku viisaampi varmaan neuvoo).

Jos vain T.M tai kuka vaan muu tietää/löytää tämän "ohjelman" (scripti?) niin viestiä kehään kiitos!

mk1970

  • Käyttäjä
  • Viestejä: 213
    • Profiili
Jääkö tuo odottamaan kunnes kone1 on suorittanut komennon ennenkuin ottaa yhteyttä koneeseen kone2? Jos jää, niin ei sovi mun tarkoitukseen  :-\

Jää odottomaan. Mutta ainahan sen ssh:n voi käynnistää taustalle (lisäämällä rivin loppuun & -merkin) jos etäkoneessa ajettava ohjelma tekee kaiken taustalla eikä vaadi mitään inputtia käyttäjältä. Lisäksi kannattaa huomioida, että ohjelma voi vaatia tty:n tai se ei toimi oikein. Ratkaisu saattaa olla käyttää -t parametriä ssh:n kanssa.

Tätä en ymmärtänyt? Pitää kokeilla... Siis tuon tekeminen _vain_ sillä koneella, josta yhteydet otetaan, riittäisi?

Riittää kun siirrät julkisen avaimen yhteyden ottavasta koneesta kohteeseen. Totta kai voit jokaisella koneella luoda julkisen avaimen ja laittaa sen muiden koneiden authorized_keys tiedostoon mutta jos riittää että kone0 ottaa yhteyden koneisiin 1,2 ja 3 niin antamani esimerkki riittää.

Ville Pöntinen

  • Käyttäjä
  • Viestejä: 2078
    • Profiili

Ahaa. Noita kohdekoneita vaan kun on 76...

Asmo Koskinen

  • Käyttäjä
  • Viestejä: 4443
    • Profiili
Noita kohdekoneita vaan kun on 76...

Skriptin nimi on "Mussh".

Tein sen käytöstä ohjeen:

http://forum.ubuntu-fi.org/index.php?topic=4740.0

Joudut ensimmäisellä keralla kopiomaan julkisen avaimen 76 kertaa, mutta sen jälkeen riittää pelkkä Mussh-skripti.

Koska itse en hallinnoi kuin yhtä konetta (arkki.info), niin en voi tarjota enempää tosimaailman esimerkkejä. Mutta hyvin tuo näytti toimivan.

Ystävällisin terveisin Asmo Koskinen.

Manda

  • Käyttäjä
  • Viestejä: 5
    • Profiili
    • www.unix.fi
pdsh:lla pystyy myös hoitamaan monta yhteyttä kerralla.
http://www.llnl.gov/linux/pdsh/pdsh.html
Mut ssh avaimet kannataa pitää salasana suojattuna ja käyttää ssh-add (ja ssh-agent:tia) sillon kun tarvii manageroida isoa määrää koneita.
Toivoittavasti tällä pääsee alkuun.