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://siadlak.com/). 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)
[tags]linux, bash[/tags]

Uważaj!

Nigdy nie wiadomo, kiedy pojawi się nowy tekst na tym blogu. Jeśli nie chcesz, aby Cię ominął - zostaw maila, dam Ci znać :)

10 comments

  1. 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 🙂

  2. @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 ./ ?

  3. 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.

  4. 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… 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

*
*