April 9

Logowanie via SSH bez hasła

10  comments

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 https://personaldevelopment.pl/). 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]


Tags


You may also like

Dlaczego nigdzie nie ma zdjęć naszych dzieci?

Budowanie więzi: Wspólne przeżywanie emocji

  • 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 🙂

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

  • 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…

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

  • 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… 😉

  • {"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

    Use this Bottom Section to Promote Your Offer

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim 

    >