Hodžův blog

03 Úno

SSH bez klíčů aneb k čemu je ten EXPECT?

Na většině serverů se dá bezproblémově používat přihlašování pomocí SSH klíčů. Bohužel některé zařízení (hlavně WiFi AP) klíče nezvládají. Chceme-li do takového zařízení přistupovat (většinou nějakým scriptem) máme problém, neboť heslo se do SSH z bezpečnostních důvodů nedá poslat rourou. Naštěstí existuje program Expect, kterým lze SSH ošidit.

Postup zprovoznění:

1. Nainstalovat Expect (na to vždycky zapomenu)

2. Vytvořit si nějaký soubor – třeba ssh_connect
# touch ssh_connect

3. Nastavit mu patřičná práva
# chmod +x ssh_connect

4. Vložit do něj následující obsah
#!/usr/bin/expect
spawn ssh 194.213.45.210 -l hodza
expect ".* password:"
send "leila\r"
expect "hodza@tux:~#"
send "uptime\r"
expect "hodza@tux:~#"
send "exit\r"

Co znamenají jednotlivé řádky ve skriptu?
1. Cesta k programu expect (upravte si ji podle vašeho systému)
2. Pokus připojit se na IP adresu 194.213.45.210 pomocí SSH s uživatelským jménem hodza
3. Čekání na řetězec “.* password:”
4. Zaslání uživatelského hesla “leila”
5. Čekání na řetězec “hodza@tux:~#” (konzole)
6. Zaslání požadavku na uptime
7. Čekání na řetězec “hodza@tux:~#” (konzole)
8. Ukončení programu expect

Toto je pouze ukázkový script – nejsou v něm zahrnuty vyhodnocovací podmínky – tj. SSH se může zeptat, zda-li stanici chceme přidat do ~/.ssh/known_hosts, případně nemusí byt hostitel dostupný atd…

Nezapomeňte upravit patřičné části scriptu – tj. IP adresu (194.213.45.210) , přihlašovací jméno (hodza), heslo (leila) a prompt terminálu (hodza@tux:~#)

5. Skript spustíme v aktuálním adresáři zadáním
# ./ssh_connect

Na konzoli by jste měli vidět něco takového

root@tux:# ./ssh_connect
spawn ssh 194.213.45.210 -l hodza
root@194.213.45.210's password:
Last login: Fri Sep 8 15:21:40 2006 from 194.213.45.210
Linux 2.6.17.11.
hodza@tux:~# uptime
15:54:58 up 218 days, 8:27, 3 users, load average: 0.00, 0.03, 0.06
hodza@tux:~#
root@tux:~#

Leave a Reply

Hodžův blog is is proudly powered by Wordpress and the Magellan Theme