Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Internet a sítě => Téma založeno: beer 28 Listopadu 2011, 22:17:13

Název: ping a ssh
Přispěvatel: beer 28 Listopadu 2011, 22:17:13
Ahoj, může někdo poradit jak na skript, kterej by nejprve v pravidelných intervalech zjišťoval, zdali je stroj online a v případě, že by se připojil, tak by vykonal příkaz - připojil se například přes ssh a připojil vzdálený pc.

Napadlo mne, že by to mohlo být nějak takto:

Kód: [Vybrat]
#!/bin/bash
ping -I n2n-gabi -i 10 10.2.2.1 && ssh root@10.2.2.1

Ale to je asi blbost...
Název: Re:ping a ssh
Přispěvatel: donny 28 Listopadu 2011, 22:43:00
Kód: [Vybrat]

#!/bin/bash

remote="192.168.2.2"

ret=$(ping -c 1 $remote | grep icmp_seq | wc -l)

[ $ret -eq 0 ] || exit 1

# dalsi prikazy se provedou jen pokud ping prosel
 
ssh user@$remote

Název: Re:ping a ssh
Přispěvatel: beer 28 Listopadu 2011, 22:52:32
Super, díky, vyzkouším.
Název: Re:ping a ssh
Přispěvatel: beer 29 Listopadu 2011, 00:31:32
Nepřipojí se, je potřeba zadat heslo a to bych musel u toho furt sedět. Ideální by bylo to heslo integrovat do souboru. Samozřejmě, někdo může namítat, že to není příliš bezpečné, že bych si měl vygenerovat klíče. To je trošku problém. Fyzický přístup k druhému počítači nemám, měl bych tam mít přístup přes ssh a n2n, nicméně je skoro pořád vypnutý a nevím, kdy se zrovna zapne. Proto asi jiné řešení aktuálně není, než to heslo někam uložit, aby se navázalo spojení.

Tak zkouším prozatím na localhostu, jak by to mělo vypadat, a bohužel nemohu přijít, jak to heslo integrovat  ???
Kód: [Vybrat]
#!/bin/bash
remote="localhost"
heslo="mojeheslo"
ret=$(ping -c 1 $remote | grep icmp_seq | wc -l)

[ $ret -eq 0 ] || exit 1

# dalsi prikazy se provedou jen pokud ping prosel
 
ssh user@$remote $heslo

Jo a bylo by možné logovat úspěšné navázání spojení?
Název: Re:ping a ssh
Přispěvatel: jmp 29 Listopadu 2011, 07:27:20
jen nejak nechapu, proc to rovnou nezkusit pripojit na tom sshcku (funkcne v tom nebude rozdil...)
Název: Re:ping a ssh
Přispěvatel: ntz_reloaded 29 Listopadu 2011, 08:48:26
Kód: [Vybrat]
ret=$(ping -c 1 $remote | grep icmp_seq | wc -l)

[ $ret -eq 0 ] || exit 1
o.O i'm bleeding from eyes ...

nestacilo by proste:

Kód: [Vybrat]
ssh 192.168.50.82 -o ConnectTimeout=2
+ vygenerovane keys

[edit: po rozdeleni pro uplnost]presne jak rika jmp to v realu funguje takto

client vysila standardni ARP who-has metodou jako u pingu dotaz na prezenci hosta a timeout je zde resen v ssh klientu samotnem, takze z proceduralniho hlediska je to stejne !! (resp. usetrime 90% utilizace ;))

Kód: [Vybrat]
10:08:12.400419 ARP, Request who-has 192.168.60.119 (Broadcast) tell s10u7-esx.boocousa.us, length 46
10:08:13.400471 ARP, Request who-has 192.168.60.119 (Broadcast) tell s10u7-esx.boocousa.us, length 46
Název: Re:ping a ssh
Přispěvatel: beer 29 Listopadu 2011, 12:21:14
Máte pravdu, příkaz od ntz by byl jednodužší.

Nicméně první skript se mi líbí víc, a to z toho důvodu, že bych na něm mohl dál stavět, například příkaz na připojení nahradit jiným příkazem, typu oznámení na ploše, že je ten a ten počítač online.
Ještě jsem to moc nezjišťoval, jak se to dělá, jestli nějaké libnotify nebo něco takového.

Nebo bych mohl ten script dále rozšiřovat o mount, rsync nějaké složky, atd.
Nějaké menší úpravy bych snad zvládl metodou pokus omyl. Je pravda, že mi ale chybí základy a s angličtinou na tom nejsem zrovna nejlépe. Například včera jsem si chtěl smazat soboury v domovské složce, které začínájí ~.
Napsal jsem něco jako rm -r ~* a hádejte, jak to dopadlo  ;D
Název: Re:ping a ssh
Přispěvatel: beer 30 Listopadu 2011, 02:55:55
Tak, zkoušel jsem druhou variantu od ntz, ale ta nefunguje, v případě že pc s ip adresou není zapojené, tak to hodí status Connection timed out.

pc s ip 10.2.2.1 je offline
Kód: [Vybrat]
medved@ubuntu-pc:~$ ssh 10.2.2.1 -o ConnectTimeout=2
ssh: connect to host 10.2.2.1 port 22: Connection timed out
medved@ubuntu-pc:~$

pc s ip 10.2.2.2, které je online (localhost)
Kód: [Vybrat]
medved@ubuntu-pc:~$ ssh 10.2.2.2 -o ConnectTimeout=2
The authenticity of host '10.2.2.2 (10.2.2.2)' can't be established.
ECDSA key fingerprint is **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:
Are you sure you want to continue connecting (yes/no)?

Musím bohužel kontatovat, že nefungují spolehlivě ani jeden. První varianta nehodí sice time out, ale skript ve většině případů skončí během pár vteřin sám. Někdy se ale z nějakého neznámého důvodu drží a čeká.
Vypadá to, že na ty exit_statusy jsou tedy náchylné oba dva příkazy.
Název: Re:ping a ssh
Přispěvatel: ntz_reloaded 30 Listopadu 2011, 13:26:35
Tak, zkoušel jsem druhou variantu od ntz, ale ta nefunguje, v případě že pc s ip adresou není zapojené, tak to hodí status Connection timed out.

pc s ip 10.2.2.1 je offline
Kód: [Vybrat]
medved@ubuntu-pc:~$ ssh 10.2.2.1 -o ConnectTimeout=2
ssh: connect to host 10.2.2.1 port 22: Connection timed out
medved@ubuntu-pc:~$

OMG, a co jineho to ma delat ? takhle to je spravne.
Pokud chces mermomoci skript, tak to udelej takhle nejak (podminka while pro persistentni cyklus)

Kód: [Vybrat]
while sleep 5; do
    if ! ping -W2 -c1 192.168.50.199; then
        echo tady bude nejaka akce ze se to nepinglo;
    else
        echo tady to je v pohode;
    fi
done
Název: Re:ping a ssh
Přispěvatel: ntz_reloaded 30 Listopadu 2011, 13:30:28
ps. temo rozdeleno a zmoderovano: http://forum.ubuntu.cz/index.php?topic=60210.0 (informace jsem dal sem) ..
dalsi diskuse nepripoustim, placte pokud se citite dotceni chcete-li.

ave, ntz
Název: Re:ping a ssh
Přispěvatel: beer 30 Listopadu 2011, 14:05:33

OMG, a co jineho to ma delat ? takhle to je spravne.
Pokud chces mermomoci skript, tak to udelej takhle nejak (podminka while pro persistentni cyklus)

Kód: [Vybrat]
while sleep 5; do
    if ! ping -W2 -c1 192.168.50.199; then
        echo tady bude nejaka akce ze se to nepinglo;
    else
        echo tady to je v pohode;
    fi
done

To by snad šlo. Jestli znamená persistentní cyclus to, že to neskončí předčasně timeoutem a script vyčká, až bude druhá strana online a pak teprve vykoná nějakou akci.
Název: Re:ping a ssh
Přispěvatel: ntz_reloaded 30 Listopadu 2011, 14:16:39
persistentni znamena, ze cyklus

while sleep 5; do $foo; done

provadi akci $foo (v nasem pripade overovani zdali-je host up + prislusne akce) kazdych 5 sekund a sam o sobe nikdy nekonci.