Portál AbcLinuxu, 12. května 2025 15:19

Dotaz: ssh zastavi skript

6.8.2006 01:35 h7
ssh zastavi skript
Přečteno: 133×
Odpovědět | Admin
Ahoj, rad bych pomoci nize psaneho skriptu automatizoval drobne ukony na vice masinach.Mam zprovozneno funkcni ssh overovani pomoci klice. Pokud odkomentuji # echo totofunguje ,tak while probehne ,ale s ssh commandem ne.Kde delam chybu? Pekne nedelni rano! h7
while read ip; do
if $(echo $ip|grep -q '#')
then
 echo "Lokalita $ip"
else
# echo totofunguje
 ssh $ip ls
fi
done < /serverlist.txt

#### serverlist.txt ###

#praha
1.2.3.4
#brno 
2.3.4.5
#ostrava
1.4.7.8
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.8.2006 04:04 Haaja | skóre: 25 | blog: haaja | Praha
Rozbalit Rozbalit vše Re: ssh zastavi skript
Odpovědět | | Sbalit | Link | Blokovat | Admin
No tak na prvni pohled mi prijde, ze v te druhe casti podminky, za else v promenne $ip neni jen ipadresa ale je tam treba: praha 1.2.3.4, tam se tezko pripoji.

Osobní blog
6.8.2006 04:07 Haaja | skóre: 25 | blog: haaja | Praha
Rozbalit Rozbalit vše Re: ssh zastavi skript
Tak jsem to zkusil, a je to tak, takze to chce nejak vzit pouze tu ip adresu, jde to vyresit treba takto:
#!/bin/bash
while read ip 
  do if $(echo $ip|grep -q '#'); then
        echo "Lokalita $ip"; 
     else
        ip=${ip#*:}
        ssh $ip ls
     fi 
  done < ~/serverlist.tx

haaja@book ~ $ cat serverlist.txt 
#praha:127.0.0.1
brno:127.0.0.1

Nevim jestli je to nejlepsi reseni, ale snad to pomuze.
6.8.2006 09:57 h7
Rozbalit Rozbalit vše Re: ssh zastavi skript
Cau ,dik za snahu... ..ale blbe jsem vlozil dotaz (formatovani),txt soubor mam opravdu ve tvaru
#praha
1.2.3.4
#brno
1.2.3.5
#ostrava
1.2.3.6
Nemuze to byt nejakym nastavenim ssh ,pouzima fedoru 5 h7
6.8.2006 10:10 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: ssh zastavi skript
Opravil jsem formátování v dotazu.
When your hammer is C++, everything begins to look like a thumb.
6.8.2006 11:48 Haaja | skóre: 25 | blog: haaja | Praha
Rozbalit Rozbalit vše Re: ssh zastavi skript
Aha, uz jsem pochopil v cem je zakopany pes. Myslim, ze nastaveni ssh na to vliv nema. Ale dela mi to zrejme to same co vam, pripoji se na prvni ssh adresu a pak se ukonci.
6.8.2006 11:54 h7
Rozbalit Rozbalit vše Re: ssh zastavi skript
yoyo to je presne to nezadouci chovani... kdysi davno jsem podobnou while smycku + ssh pouzival na mandrake a tam vse chodilo. Problem tedy hledam v ssh. h7
6.8.2006 12:19 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ssh zastavi skript
Odpovědět | | Sbalit | Link | Blokovat | Admin

Problém je v tom, že potomek, v tomto případě ssh, zdědí veškeré deskriptory otevřených souborů od svého rodiče, v tomto případě shellu provádějícího skript. Protože máte přesměrovaný standardní vstup při provádějí skriptu while, bude i ssh spušten s takto přesměrovaným vstupem a podle všeho vám ho "vyluxuje". Vyřešit to můžete např. takto:

#!/bin/bash

exec 3<serverlist.txt
while read ip <&3; do
if [ "${ip#*#}" != "${ip}" ]
then
  echo "Lokalita $ip"
else
  ssh "$ip" ls
fi
done
6.8.2006 12:28 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ssh zastavi skript
Jo, a nedávejte, prosím, předem jedno "nebyla vyřešena" do zásoby.
6.8.2006 12:33 Haaja | skóre: 25 | blog: haaja | Praha
Rozbalit Rozbalit vše Re: ssh zastavi skript
Omlouvám se.
To "nebyla vyřešena" jsem dal já, omylem jsem kliknul na "byla" vyřešena a aby to nemátlo, tak jsem to chtěl vrátit a jediné co mě napadlo, bylo použít tlačítko "nebyla". Aby se k tomu příspěvku někdo vrátil.

Moc dobře to řešení nechápu, konkrétně to použití exec 3< ale k tomu snad pomůže man stránka.
6.8.2006 12:40 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ssh zastavi skript
Příkaz exec vám otevře ten soubor coby handle 3 a read necháte číst z tohoto otevřeného souboru (ampersand mu říká, že trojka je číslo deskriptoru a ne jméno souboru). Tím nedojde k přesměrování standardního vstupu a ssh pracuje s vaším terminálem, což potřebujete.
6.8.2006 12:43 Haaja | skóre: 25 | blog: haaja | Praha
Rozbalit Rozbalit vše Re: ssh zastavi skript
Děkuji za objasnění.
David Watzke avatar 7.8.2006 05:12 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: ssh zastavi skript
Omlouvám se.
To "nebyla vyřešena" jsem dal já, omylem jsem kliknul na "byla" vyřešena a aby to nemátlo, tak jsem to chtěl vrátit a jediné co mě napadlo, bylo použít tlačítko "nebyla". Aby se k tomu příspěvku někdo vrátil.
Jj, chtělo by to fixnout bug #534 :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Josef Kufner avatar 6.8.2006 12:44 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: ssh zastavi skript
A nebylo by jednodušší ssh vstup sebrat?
while read ip; do
if $(echo $ip|grep -q '#')
then
 echo "Lokalita $ip"
else
# echo totofunguje
 ssh -n $ip ls
fi
done < /serverlist.txt
Hello world ! Segmentation fault (core dumped)
6.8.2006 12:46 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ssh zastavi skript
To by sice jednodušší bylo, ale hrozí riziko, že až budete za pár měsíců ten skript upravovat, nevzpomenete si na to, přidáte do některé z větví jiný příkaz, který něco čte ze standardního vstupu, a budete tam, kde jste byl.
Josef Kufner avatar 6.8.2006 18:31 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: ssh zastavi skript
Třeba není tak hloupý a vzpomene si na tenhle problém s ssh a připíše za ten příkaz </dev/null
Hello world ! Segmentation fault (core dumped)
6.8.2006 13:22 h7
Rozbalit Rozbalit vše Re: ssh zastavi skript
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky vsem za odpoved,zas jsem trochu chytrejsi.. Mohl by mi nekdo vysvetlit proc nasledujici konstrukce nefunguje?

exec 3<serverlist.txt
while read ip ; do
if [ "${ip#*#}" != "${ip}" ]
then
  echo "Lokalita $ip"
else
  ssh "$ip" ls
fi <&3
done
6.8.2006 13:26 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: ssh zastavi skript
Z přesně stejného důvodu jako to, co jste měl na začátku: ssh zdědí deskriptor, kterým čtete obsah souboru serverlist.txt, jako svůj standardní vstup.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.