Vraag Hoe kan ik wachtwoordloze SSH-aanmelding instellen?


Ik wil via ssh kunnen inloggen op een afstandsbediening zonder het wachtwoord altijd in te hoeven voeren.

  • Hoe stel ik het in?
  • Is een andere opdracht vereist om een ​​sessie zonder wachtwoord uit te voeren?

226
2018-06-04 17:24


oorsprong


Gebruikt u openssh? (als dat zo is;))) - Rinzwind
@Rinzwind, Waarom zou ik moeite doen om de gepatenteerde versie te krijgen wanneer OpenSSH al vooraf is geïnstalleerd? - Oxwivi
Ik probeer geen assupties te maken;) - Rinzwind
Merk op dat dit als een slechte beveiligingspraktijk wordt beschouwd, en bij sommige distributies wordt dit uit de doos uitgeschakeld. Ik weet het niet zeker, maar het is mogelijk dat je moet inschakelen PermitRootLogin in /etc/ssh/sshd_config om dit te laten werken. - Kevin
@Kevin, vertel jezelf alsjeblieft. We hebben het over ssh-ing zonder wachtwoord, wat over het algemeen een is goede praktijken. Bedoel je ssh-ing in een rootshell? Dat is niet gedekt door deze vraag. - Oxwivi


antwoorden:


Antwoord

Voer deze opdrachten uit:

ssh-keygen

Dan moet je de nieuwe sleutel naar je server kopiëren:

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

Nadat de sleutel is gekopieerd, ssh in de machine zoals normaal:

ssh user@host

U kunt nu inloggen zonder een wachtwoord in te voeren vanaf de specifieke computer waarop u de opdrachten hebt uitgevoerd.

Voorbeeld

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Uitleg

Dit gaat ervan uit dat je al met succes verbinding kunt maken met je server via SSH.

U moet een SSH-sleutelpaar genereren waarmee u uzelf kunt identificeren zonder een wachtwoord te gebruiken. Je kunt ervoor kiezen om de sleutels te beschermen met een wachtwoord als je dat wilt, maar dit kan blanco worden gelaten waardoor je volledig wachtwoordloze SSH-toegang hebt.

  1. Maak eerst je SSH-sleutelpaar door te lopen ssh-keygen dit zal een maken id_rsa en id_rsa.pub het dossier. De pub bestand is wat er op de servers gebeurt, de private key (id_rsa) is wat je bijblijft en is hoe je jezelf identificeert.
  2. Kopieer vervolgens de openbare sleutel naar uw server met ssh-copy-id user@server gebruiker vervangen door uw externe gebruiker en server met de machine DNS-naam of IP-adres. Het vraagt ​​om uw SSH-wachtwoord, voert het in en als alles is voltooid, kunt u de machine via openen ssh user@server zonder een wachtwoord nodig te hebben.

Referenties


231
2018-06-04 17:36



@Oxwivi dit antwoord is de correctere manier om het te doen - maar het lijkt langer. Het enige dat u hoeft te doen is typen ssh-keygen volg de instructies op het scherm en typ vervolgens ssh-copy-id user@server gebruiker vervangen door uw externe gebruiker en server met de externe machine - Marco Ceppi♦
Ik had deze foutmelding: "Agent heeft toegegeven dat hij niet heeft ondertekend met de sleutel." elke keer wanneer je probeert in te loggen na het volgen van deze procedure. De oplossing was om "> ssh-add" op de lokale computer uit te voeren en nu kan ik zoals verwacht inloggen op de externe machine. - jmbouffard
Het is de moeite waard om te vermelden dat als u een aangepaste poort voor @server moet gebruiken, u dit moet doen met: ssh-copy-id "not-marco@127.0.0.1 -p 1234". - s3m3n
@Rinzwind: betekent dit dat ik me nooit kan authenticeren van een onbekende client / computer naar mijn server als ik passwd-authenticatie uitschakel & alleen sleutelverificatie toestaat. Is er een manier om inloggen vanaf een onbekende machine toe te staan ​​met behulp van de persoonlijke sleutel die is gegenereerd voor een bekende / geconfigureerde client om met de server te communiceren? Ik bedoel, is deze private sleutel draagbaar & kan ik mezelf verifiëren aan de server van andere machines, in geval van nood? - Rajat Gupta
Maar de server vraagt ​​nog steeds om het wachtwoord ", - lerner


Typ de volgende opdrachten:

  1. ssh-keygen 

    druk op invoeren sleutel tot je de prompt krijgt

  2. ssh-copy-id -i root@ip_address

    (Het zal eens om het wachtwoord van het hostsysteem vragen)

  3. ssh root@ip_address

Nu zou je in staat moeten zijn om in te loggen zonder wachtwoord.


30
2018-05-17 08:45





De manier waarop ik dit meestal doe is als volgt:

ssh-keygen -t rsa

(Laat het leeg als u om een ​​wachtwoord wordt gevraagd)

Dan: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(Hiervoor moet de map .ssh zich in de basismap op de beoogde hostnaam bevinden, met daarin het bestand authorized_keys)

Vervang de gebruikersnaam natuurlijk door de gewenste gebruikersnaam en de hostnaam met de gewenste hostnaam of het IP-adres

Daarna gewoon SSH naar die box zoals je gewend bent.


21
2018-06-04 18:22



Hoe zit het met de touch en chmod commando in Rinzwind's antwoord? - Oxwivi
Je moet het chmod chmod .ssh/authorized_keys bestand naar 0600 of dit zal niet werken - Marco Ceppi♦
Dit hielp echt omdat ik ssh-copy-id niet kon laten werken voor root op mijn server. het moet root zijn in de situatie waarin backuppc (of een andere daemon) op een andere machine moet sshennen. - Adam


Ik gebruik normaal sshpass daarvoor installeer het met sudo apt-get install sshpass en gebruik het als volgt

sshpass -p 'password' ssh your_username@your_server

18
2017-12-06 17:26



Waarom geen ssh-sleutels gebruiken? - enzotib
Het is geen "waarom niet" -situatie, het werkt nog steeds perfect zonder het toevoegen van sleutels, het is gewoon een andere methode die ik zou zeggen. - Bruno Pereira
Bedankt voor de informatie over sshpass, nog nooit van gehoord. - Panther
SSH-sleutels zijn het "juiste" antwoord op de vraag, maar sshpass is een zeer nuttige hack in gevallen waarin u de authenticatiemethode op de externe server niet kunt wijzigen! - Jacob Krall
Dit is erg gevaarlijk, je blijft in bash_history of wat dan ook de gewone wachtwoorden voor de hosts waarmee je verbinding maakt .. - kappa


Deze oplossing is speciaal bedoeld voor gebruikers ramen naar ssh in hun externe machines inclusief cloudbeelden op AWS Cloud en GCE Cloud


9
2017-11-20 09:07





Schakel wachtwoordverificatie uit

Omdat veel mensen met SSH-servers zwakke wachtwoorden gebruiken, veel   online aanvallers zoeken naar een SSH-server en beginnen te raden   wachtwoorden willekeurig. Een aanvaller kan duizenden wachtwoorden proberen in een   uur, en denk dat zelfs het sterkste wachtwoord genoeg tijd heeft gegeven. De   aanbevolen oplossing is om SSH-sleutels te gebruiken in plaats van wachtwoorden. Om zo te zijn   moeilijk te raden als een normale SSH-sleutel, zou een wachtwoord moeten bevatten   634 willekeurige letters en cijfers. Als je je altijd kunt aanmelden   op uw computer met een SSH-sleutel, moet u het wachtwoord uitschakelen   authenticatie helemaal.

Als u wachtwoordverificatie uitschakelt, is het alleen mogelijk om   maak verbinding met computers die u specifiek hebt goedgekeurd. Dit enorm   verbetert uw veiligheid, maar maakt het onmogelijk voor u om verbinding te maken   uw eigen computer vanaf de pc van een vriend zonder de pc vooraf goed te keuren, of   vanaf uw eigen laptop wanneer u per ongeluk uw sleutel verwijdert.

Het wordt aanbevolen om wachtwoordverificatie uit te schakelen, tenzij u een   specifieke reden om niet te doen.

Ga naar de volgende regel om wachtwoordverificatie uit te schakelen   uw sshd_config-bestand:

#PasswordAuthentication yes

vervang het door een regel die er zo uitziet:

PasswordAuthentication no

Nadat je het bestand hebt opgeslagen en je SSH-server opnieuw hebt opgestart, jij   zou zelfs niet om een ​​wachtwoord moeten worden gevraagd als je inlogt.

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


7
2018-02-15 01:10



Dit is het meest eenvoudige juiste antwoord, maar goed voor de veiligheid! Ook het uitschakelen van de root login is een andere goede - FreeSoftwareServers
Doet PasswordAuthentication no invloed op alle gebruikers? Zo niet, hoe schakel ik dit uit voor normale gebruikers, maar laat ik dit ongewijzigd als root terwijl ik het aan het testen ben? Ik wil het niet echt opdringen en mezelf volledig uitsluiten. - Adam
Houd een SSsh-sessie open, zodat je deze terug kunt veranderen. U wilt wachtwoorden EN root uitschakelen. Ja, je kunt het fubar. Do not;) - Thufir
Tijdens ssh heb ik een fout Permission denied (publickey). met PasswordAuthentication no. Wat moet ik doen? Verander ik PasswordAuthentication noop een andere host? - ParisaN


Als u een public / pricate keypair maakt en inlogt met onze nieuw gemaakte openbare sleutel, hoeft u uw wachtwoord niet te typen. Afhankelijk van de configuratie van je key-ring en / of ssh-agent moet je je sleutel misschien beschermen met een wachtwoordzin.

Hier is er een van de velen korte howtos voor jou. Het is van cruciaal belang voor de veiligheid van deze methode dat de gegenereerde privésleutel privé blijft! Je mag het nooit met iemand delen of toegang toestaan ​​in welke hoedanigheid dan ook.

Dit commando genereert een redelijk sterke sleutel in ~/.ssh/:

ssh-keygen -b 4096

In ~/.ssh/ je zult je publieke sleutel vinden als id_rsa.pub. De inhoud ervan moet worden toegevoegd aan uw servers authorized_keys bestand door de via een transporteerbare media (pen drive) te transporteren of door wachtwoordverificatie op de server in te schakelen en vervolgens te gebruiken ssh-copy-id ~/.ssh/id_rsa.pub username@server en dan weer uit te schakelen.

Als u ervoor kiest om uw sleutel te beveiligen met een wachtwoordzin (in de eerste stap), kunt u gebruiken ssh-agent of de Ubuntu-sleutelring om die pharse lokaal te beveiligen, zodat u deze niet altijd hoeft te typen.


4
2018-06-04 17:32





Inloggen / kopiëren op afstand zonder een wachtwoord in te voeren

De applicaties ssh en scp om op afstand in te loggen en op afstand te kopiëren, kunt u communiceren met een externe host zonder een wachtwoord op te geven. Dit vereist dat u een authenticatieprocedure volgt zoals hieronder beschreven. Onder klant verstaan ​​wij de machine waar u op zit en per server bedoelen wij de machine waarop u wilt inloggen zonder een wachtwoord in te voeren. De stappen van de authenticatieprocedure zijn:

  1. Voer ssh-keygen uit om privé- en openbare sleutels te genereren, tenzij dit al op uw computer is gebeurd. Deze worden opgeslagen in bestanden in $HOME/.ssh.
  2. Voeg de inhoud van het openbare sleutelbestand toe aan het bestand $HOME/.ssh/authorized_keys of $HOME/.ssh/authorized_keys2 op de server.

Er zijn drie verschillende typen verificatieprotocollen. U geeft het type op bij het uitvoeren van ssh-keygen:

  1. SSH protocol versie 1, rsa1: dit is de standaardkeuze en resulteert in bestandsidentiteit (privésleutel, zou moeten nemen chmod 0700 om ervoor te zorgen dat dit bestand niet leesbaar is voor anderen) en identity.pub (publieke sleutel).
  2. SSH protocol versie 1, RSA: dit wordt verkregen door te hardlopen ssh-keygen -t rsa en resulteert in bestanden id_rsa (privésleutel) en id_rsa.pub (publieke sleutel)
  3. SSH protocol versie 1, DSA: dit wordt verkregen door te hardlopen ssh-keygen -t dsa en resulteert in bestanden id_dsa (privésleutel) en id_dsa.pub (publieke sleutel)

Bij het uitvoeren van ssh-keygen kunt u vertrouwen op standaardantwoorden (wat inhoudt dat u geen wachtwoordzin geeft). Dit maakt de hele set-up eenvoudig, maar ook onveilig.

U kunt opgeven welk type sleutels door een optie moet worden gebruikt ssh; ssh -1 dwingt gebruik van rsa1 toetsen (protocolversie 1), terwijl ssh -2 krachten ssh proberen RSA of DSA alleen toetsen (protocol versie 2). In de onderstaande voorbeelden genereren en installeren we rsa1 en DSA toetsen op de externe host zodat u meer flexibiliteit hebt. U kunt een configuratiebestand maken in uw .ssh map met de regel

Protocol 1,2

Dit maakt ssh probeer een rsa1 (protocol versie 1) verbinding eerder RSA / DSA (protocol versie 2).

RSA1-sleutels gebruiken

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

DSA-sleutels gebruiken

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

Dit is alles wat u hoeft te doen als u geen wachtwoordzin hebt gebruikt bij het genereren van de sleutels. U kunt de verbinding testen door ssh $ remote uit te voeren en te kijken of u kunt inloggen zonder een wachtwoord op te geven (mogelijk moet u dit gebruiken -1 of -2 als opties om ssh). De procedure kan natuurlijk worden herhaald voor elke computer waarop u wilt inloggen.

Als u een wachtwoordzin hebt gebruikt, moet u het programma uitvoeren ssh-agent om een ​​speciale shell te starten, gevolgd door ssh-add om uw te registreren sleutel / wachtwoord combinatie met sshd. Zie de man-pagina's voor deze programma's voor meer informatie.

Een script voor het automatiseren van wachtwoordvrije verbindingen: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

gekopieerd van: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


3
2017-09-14 08:27





Om enkele toevoegingen te maken:

  • Mac heeft standaard geen ssh-copy-id, je moet het zelf installeren:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

vind hier meer: https://github.com/beautifulcode/ssh-copy-id-for-OSX

  • als je een port-forwarding hebt gemaakt, zou de opdracht er als volgt uit moeten zien:

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

merk op dat de aanhalingstekens noodzakelijk zijn.


2
2017-09-14 12:14





Ik wil graag een antwoord toevoegen voor diegenen die vinden dat ze het wachtwoord moeten invoeren, zelfs als ze alle antwoorden hier hebben gelezen omdat je IdentitiesOnly hebt ingesteld als ja. En het antwoord hier kan u veel tijd besparen om meerdere sleutels te beheren, zijnde sleutels voor git of server.

Nadat ik de sleutel heb gegenereerd en naar de server heb gekopieerd:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160

Ik merkte dat het niet werkte.

Toen ging ik naar de ~/.ssh/config bestand, ik zag dit onderaan:

Host *
IdentitiesOnly yes

Dan voeg ik dit hierboven toe:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

Ik kan gewoon inloggen door binnen te gaan ssh somename.

Vervolgens kunt u meerdere ssh-sleutels toevoegen met uw favoriete namen, en u hoeft alleen de instellingen zoals de bovenstaande vier regels toe te voegen aan het configuratiebestand.

Host is de naam die u wilt invoeren wanneer u later verbinding maakt met de server; de HostName is het ip van de server; Gebruiker is de gebruikersnaam die u op de server inlogt; en het identiteitsbestand is het bestand waarin u de sleutel die u hebt gegenereerd opslaat.


1
2018-01-24 09:08