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:
- nazwa użytkownika konta ssh
- adres hosta
- port serwera (dafault’owo 22)
- 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]
10 comments
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 🙂
Jeśli wrzucasz taki plik shellowy do /usr/bin to ./ sobie podaruj. Jeśli nie, to nie widzę sensu generowania.
@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…
@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!
Dzięki serdeczne.
Nawet nie wiesz jak bardzo mi się ten skrypt przydał. 😀
Pozdrawiam
Radek
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.
Cosmoz kiedyś o tym pisał na jogu. Także night wspominał o logowaniu przez SSH.
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… 😉