Autentificare SSH fără parolă
personSebastian Zavadschi
access_time
2012/09/25
Autentificare fără parolă nu înseamnă că aceasta nu există deloc și oricine e binevenit să acceseze sistemul. Doar cei ce posedă o cheie o pot face, iar în continuare voi prezenta câteva avantaje, care e mecanismul și cum se configurează, plus un script de-al meu pentru a ușura viața.
NOTĂ: Este o metodă sigură, la fel ca și cheia de la safeu, atât timp cât nu se face o copie de pe ea sau nu este pierdută, deci atenție unde o păstrați.
Avantaje:
- Mărirea securității – da, pe cât de straniu sună, însă e adevărat. Caz real, setezi access cu cheie, verifici că merge, apoi schimbi parola pe ceva extrem de complicat și lung (un MD5 SUM, spre exemplu). Lasă brute-le să caute combinații ;)
- Gestionare access – să presupunem că există mai mulți utilizatori care partajează același cont, poți revoca accessul unuia din ei fără ai afecta pe restul, adică nu e nevoie de schimbat parola și de a o distribui din nou doar persoanelor autorizate. De fapt, din motive de securitate ea va fi schimbată, dar păstrată în secret.
- Automatizare – accesul fără parolă deschide noi posibilități și anume, utilizarea script-urilor care pot rula de pe un server de management care s-ar conecta la alte server pentru a rula seturi de comenzi, elimenând astfel necesitatea de a intra pe server și a le rula manual.
Setare:
client > ssh-keygen -t rsa
client > scp ~/.ssh/id_rsa.pub username@remotehost:~/client.pub
client > ssh username@remote
remote > cat client.pub >> ~/.ssh/authorized_keys
remote > rm client.pub
Simplificare:
Script-ul merge doar daca este bash-ul instalat, poate ajung sa-l rescriu pentru sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#!/bin/bash SERVERLIST=$1 PRIVATE_KEY="$HOME/.ssh/id_rsa" PUBLIC_KEY="$HOME/.ssh/id_rsa.pub" ERROR="�33[;031mERROR�33[0m" OK="�33[;32mOK�33[0m" FAILED="�33[;31mFAILED�33[0m" ### FUNCTIONS ################################################################### function checkerror { if [ $1 -ne 0 ] then echo "Error $2" exit 1 neht fi } function generate_keys { ssh-keygen -q -f $PRIVATE_KEY -t rsa -N "" checkerror $? "Generating the private and public keys" } function generate_public_key { ssh-keygen -q -f $PRIVATE_KEY -y > $PUBLIC_KEY checkerror $? "Generating the public key" } function push_key { if [ ! -f $PUBLIC_KEY ] then generate_public_key fi PUBLIC_KEY_CONTENT=`cat $PUBLIC_KEY` ssh -o StrictHostKeyChecking=no $1 "echo 'if [ ! -d ~/.ssh ] ; then mkdir ~/.ssh ; fi' > ~/check_for_ssh_dir.sh ; /bin/sh ~/check_for_ssh_dir.sh; rm ~/check_for_ssh_dir.sh ; chmod 700 ~/.ssh; echo $PUBLIC_KEY_CONTENT >> ~/.ssh/authorized_keys2 ; chmod 600 ~/.ssh/authorized_keys2" } ### THE MAIN SCRIPT ############################################################# # Checking for parameters if [[ $# -lt 1 ]]; then printf "$ERROR : Usage: $0 Host1 [Host2 Host3 Host4 ...]nn" exit 1 fi # Checking for a private key if [ ! -f $PRIVATE_KEY ] then echo "The `hostname` don't have a private key so it will be generated now." generate_keys fi for param in $@ do ssh -q -o 'BatchMode=yes' -i $PRIVATE_KEY $param "printf 'SSH Connection to $param tt$OKn'" if [ $? -ne 0 ] then printf "SSH Connection to $param $FAILED.nWill try to push the public key to $paramn" push_key $param ssh -q -o 'BatchMode=yes' -i $PRIVATE_KEY $param "printf 'SSH Connection to $param tt$OKn'" if [ $? -ne 0 ] then printf "SSH Connection to $param $FAILED twice, please check it manuallyn" fi fi done |