Logowanie via SSH bez hasła

Nie, to nie będzie wpis informujący o tym, że logując się przez SSH nie trzeba za każdym razem wklepywać hasła.
Mam kilka kont z dostępem do shella, a wykonywanie rutynowych czynności umożliwiających bezhasłowe logowanie (jak to zwykle z rutyną bywa) zaczęło mnie nudzić. Napisałem prosty skrypt, który na kształt kreatora wyda wszystkie niezbędne plecenia.

HOWTO

Zakładam, że masz juz swój klucz publiczny. Jeśli nie - stwórz go, wydając w konsoli polecenie

ssh-keygen -t rsa

Generator zapyta o nazwe pliku i hasła. Możesz na wszystkie pytania odpowiedzieć Enterem, pozostawiając domyślne ustawienia.

Skrypt możesz zapisać na dysku kopiując jego treść z poniższej ramki. Dla wygody umieściłem go jednak na serwerze. Teraz wystarczy wpisać:

wget http://projects.ludwikc.net/passwordless_ssh
chmod +x passwordless_ssh
./passwordless_ssh

Po kolei:

  1. nazwa użytkownika konta ssh
  2. adres hosta
  3. port serwera (dafault’owo 22)
  4. hasło (2x)

Od tego momentu wystarczy wpisac w konsoli

./yourhostname.com

żeby połączyć się z serwerem bez podawania hasła (oczywiście ssh user@host też będzie działać bez zarzutu!)

Enjoy :)

Treść dla zainteresowanych:
#!/bin/sh
cd $HOME
echo "Passwordless ssh (v. 0.6)"
echo "Enter your ssh username:"
read user
echo "Host (or ip):"
read host
# Ports added in 0.4
echo "Enter ssh port: (press Enter if you don't know)"
read port
if port=NULL
then port=22
fi
echo "Wait for connection and type password for given username"
scp -P $port $HOME/.ssh/id_rsa.pub $user@$host:~/id_rsa-passwordless.pub
echo "Success: RSA key exported."
echo "Last with-password ssh login..."
ssh $user@$host -p $port "if [ -d $dotssh ]
then
echo "Success: Directory $HOME/.ssh/ exists."
else
echo -e "There is no $HOME/.ssh/ directory." && mkdir $HOME/.ssh && echo "Success: Directory $HOME/.ssh has been created"
fi &&
cat ~/id_rsa-passwordless.pub >> .ssh/authorized_keys && rm id_rsa-passwordless.pub && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && exit"
echo "Authorization successful!"
# Added in 0.3 version - symlinks providing easier login
echo ""
if [ -d $HOME/.ssh/passwordless_login ]
then
echo "Directory $HOME/.ssh/passwordless_login has been created during last passwordless_ssh usage."
else
mkdir $HOME/.ssh/passwordless_login
fi
echo ssh $user@$host -p $port >> ~/.ssh/passwordless_login/$host
chmod +x ~/.ssh/passwordless_login/$host
ln -s ~/.ssh/passwordless_login/$host $host
echo "From now-on simply type ./$host, to log-in without password."
echo "Passwordless ssh by Ludwik C. Siadlak (http://ludwikc.net). GPL Licence. Have a nice day!"

UPDATE: v. 0.4 - Możliwość wyboru portu innego niż 22.
UPDATE: v. 0.5 - Powłoka zmieniona na /bin/sh dla kompatybilności z systemami *BSD.
UPDATE: v. 0.6 - Sprawdzanie katalogów (dzięki Jojo!) i domślny port połączenia. (Wersja passwordless_ssh-pl została zastąpiona oryginalną passwordless_ssh)

Wykop      Digg this     Create a del.icio.us Bookmark     Gwar     Kanał RSS dla wpisu        Profil LinkedIn

10 komentarzy do wpisu “Logowanie via SSH bez hasła

  • 1
    Scripta manent » Blog Archive » Passwordless SSH login
    kwiecień 9th, 2007 18:26

    […] (For Polish version click here) linux, bashShare This […]

  • 2
    SoR
    kwiecień 9th, 2007 21:17

    Pamiętaj, że lepiej chronić swoj klucz ssh hasłem, szczególnie jeśli można uzyskać na danej maszynie uprawnienia administratora via sudo bez podawania hasła. Dodatkowo jest to zabezpieczenie przed administratorami serwerów jeśli trzymasz swój prywatny klucz ssh na jakimś serwerze shell. AFAIK przez niezabezpieczony klucz ssh włamano się na jeden z serwerów debiana :)

  • 3
    D4rky
    kwiecień 10th, 2007 18:46

    Jeśli wrzucasz taki plik shellowy do /usr/bin to ./ sobie podaruj. Jeśli nie, to nie widzę sensu generowania.

  • 4
    Ludwik C. Siadlak
    kwiecień 10th, 2007 18:55

    @SoR: racja, ale w tym przypadku chodzi nam o bezhasłowe logowanie, nieprawdaż? :)

    @D4rky: możesz wrzucić do /usr/bin, możesz zostawić w ~ - Twój system, Twoje podwórko :) Żeby jednak przesunać tam, gdzie proponujesz - musisz mieć uprawnienia roota. Tylko po co, skoro mozna z ./ ?

  • 5
    Jojo
    kwiecień 11th, 2007 09:52

    Dwie uwagi:
    1. Plik http://projects.ludwikc.net/passwordless_ssh-pl to wersja 0.4, w której nie działa poprawnie podawanie innego portu niż domyślny
    2. Przydałoby się jeszcze zrobić sprawdzenie czy katalog ~/.ssh/passwordless_login istnieje przed próbą jego utworzenia, bo przy dodawaniu więcej niż jednego hosta wypluwa nieładny komunikat o błędzie…

  • 6
    Ludwik C. Siadlak
    kwiecień 11th, 2007 12:28

    @Jojo: Słusznie! Nowy update. Usunąłem wersję -pl i dodałem przekierowanie w .htaccess dla osób, które już korzystają z -pl.

    Dzięki za uwagi!

  • 7
    Radek
    kwiecień 14th, 2007 11:01

    Dzięki serdeczne.
    Nawet nie wiesz jak bardzo mi się ten skrypt przydał. :-D

    Pozdrawiam
    Radek

  • 8
    Wstrętny anonim
    kwiecień 14th, 2007 15:22

    Nie no, tyle niepotrzebnego kombinowania że słów szkoda. Wystarczy klucze publiczne poeksportować na zdalne maszyny i potem jedynie pododawać sobie aliasy w shelu i wywolanie host.com będzie skutkować ssh host.com. Klucze w tym wypadku rzecz jasna bezhasłowe.

  • 9
    Krystek
    maj 31st, 2007 22:40

    Cosmoz kiedyś o tym pisał na jogu. Także night wspominał o logowaniu przez SSH.

  • 10
    viera
    styczeń 4th, 2008 20:41

    Eh.. Przekombinowane imho.

    cat .ssh/id_rsa.pub | ssh ktos@gdzies -p 5656 ” mkdir ~/.ssh/ ; cat >> ~/.ssh/authorized_keys ”

    Po co zaraz sprawdzanie całe czy katalog jest itd… ;-)

Uwagi, komentarze?

XHTML: Możesz używać znaczników: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>