2012-11-08 1 views
6

Zdaję sobie sprawę, że to pytanie zostało zadane kilka razy, ale nie mogłem znaleźć trafnej odpowiedzi w dowolnym miejscu mojego wyszukiwania.Bash Skryptuj do SSH na maszynie bez pytania o hasło i bez użycia kluczy

Pracuję w środowisku programistycznym, w którym bezpieczeństwo nie jest problemem i każdy może po prostu odgadnąć hasło, jeśli myśli przez kilka sekund.

To, co próbuję zrobić, jest proste. Stworzyłem funkcję aliasu w moim lokalnym pliku .bashrc i chciałbym, aby ta funkcja automatycznie logowała się do komputera z domyślnym hasłem.

Moja obecna implementacja wygląda mniej więcej tak:

function s() { 
ssh [email protected]$1 
} 

Kiedy biegnę mi coś takiego:

~]s 122 

ssh [email protected] 

[email protected]'s password: 

Korzystanie Basha, a nie za pomocą kluczy RSA chciałbym uzyskać to aby użyć domyślnego hasła "hasło".

Próbowałem już, gdzie IP i użytkownik zostały już ustawione.

Do=$(expect -c " 
spawn ssh [email protected]${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
expect \"yes/no\" 
send \"yes\r\" 
expect \"assword\" send \"password\"") 
echo $Do 
$Do 

To daje błąd follwing:

Connecting and logging into server using expect 
usage: send [args] string 
    while executing 
"send" 
    invoked from within 
"expect "assword" send "password"" 
[email protected]'s password: 
bash: spawn: command not found... 

pomocą następującego polecenia jestem w stanie podłączyć urządzenie. Jeśli usunę interakcję, po prostu uruchomi się komenda uptime i zamknie połączenie. Za pomocą polecenia interakcji nie widzę, co piszę lub faktycznie wchodzę w interakcję z urządzeniem. Jakieś pomysły?

Do=$(expect -c "spawn ssh [email protected]${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]}; set timeout 4; expect \"assword\"; send \"password\n\"; expect \"test\"; send \"uptime\n\"; interact;");echo $Do; 
+0

Czy komenda tarło skonfigurować środowisko? Jeśli nie, ścieżka nie zostanie ustawiona i nie będzie wiedziała, gdzie szukać "ssh". Spróbuj umieścić pełną ścieżkę do pliku wykonywalnego. – Jay

+0

Zastanawiasz się, jaka jest twoja niechęć do kluczy RSA? Pierwszą rzeczą, którą zawsze robię podczas konfigurowania nowego systemu, jest autoryzacja klucza RSA. – mpontillo

+0

Nie chciałem pracować z kluczami RSA, ponieważ pracuję z wieloma różnymi serwerami, które mają bardzo ograniczony czas życia, a ten skrypt będzie używany przez wiele osób. Chodzi o to, aby zaoszczędzić czas, ponieważ nie trzeba wpisz za każdym razem to samo hasło. Jeśli muszę wpisać hasło za każdym razem, gdy odwiedzę nową maszynę do ssh-copy-id, klucze do niej pokonują cel. – SuperTetelman

Odpowiedz

7

Można to zrobić za pomocą narzędzia expect: http://expect.sourceforge.net/

To powszechnie dostępne, więc w zależności od systemu, odpowiednik sudo apt-get install expect lub yum install expect będzie go zainstalować. Jest to przykład skryptu . To loguje się i daje kontrolę nad interaktywnym wierszu:

#!/usr/bin/expect 

set login "root" 
set addr "127.0.0.1" 
set pw "password" 

spawn ssh [email protected]$addr 
expect "[email protected]$addr\'s password:" 
send "$pw\r" 
expect "#" 
send "cd /developer\r" 
interact 

Oto przykład jak używać expect jako część skryptu bash. Loguje się z ssh, cd do/var, uruchamia skrypt, a następnie kończy sesję ssh.

#!/bin/bash 
... 

login_via_ssh_and_do_stuff() { 

    # build the expect script in bash 

    expect_sh=$(expect -c " 
    spawn ssh [email protected] 
    expect \"password:\" 
    send \"password\r\" 
    expect \"#\" 
    send \"cd /var\r\" 
    expect \"#\" 
    send \"chmod +x my_script.sh\r\" 
    expect \"#\" 
    send \"./my_script.sh\r\" 
    expect \"#\" 
    send \"exit\r\" 
    ") 

    # run the expect script 
    echo "$expect_sh" 
} 

Możesz pozostawić te fragmenty w skrypcie w lokalnym systemie, a następnie podać tylko alias do skryptów.

Ponadto: Wiem, że powiedziałeś, że bezpieczeństwo nie jest problemem, ale chciałbym po prostu zauważyć, że "właściwą" drogą do ssh bez użycia hasła jest użycie pary kluczy ssh =)

+0

@Kevin: Negatywne: http://www.pantz.org/software/expect/expect_examples_and_tips.html –

+1

Użyłem obu \ n i \ r, aby oczekiwać skryptów. Czy jeden jest polecany nad drugim? – SuperTetelman

4

Użyj sshpass, który jest dostępny w repozytoriach pakietów na głównych Linux-es.

Na przykład, gdy hasło jest password.txt pliku:

sshpass -fpassword.txt ssh [email protected] 

sshpass runs ssh in a dedicated tty , fooling it into thinking it is getting the password from an interactive user.