Vraag ssh: automatisch sleutels accepteren


Ik heb dit kleine hulpprogramma-script geschreven:

for h in $SERVER_LIST; do ssh $h "uptime"; done

Wanneer een nieuwe server is toegevoegd aan $SERVER_LIST, het script wordt gestopt met:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

Ik heb geprobeerd yes:

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

zonder geluk.

Is er een manier om te parametreren ssh om automatisch een nieuwe sleutel te accepteren?


171
2018-04-18 09:11


oorsprong


Het antwoord van Lekensteyn is uitstekend en correct, maar ik wilde alleen maar opmerken dat ssh "ja" en verwacht yes geeft "y" weer, misschien heb je meer geluk gehad met for h in $SERVER_LIST; do yes yes | ssh $h "uptime"; done (let op het extra ja, dat zegt ja wat te zeggen in plaats van "y"). - chazomaticus


antwoorden:


Gebruik de optie StrictHostKeyChecking, bijvoorbeeld:

ssh -oStrictHostKeyChecking=no $h uptime

Deze optie kan ook worden toegevoegd aan ~ / .ssh / config, bijvoorbeeld:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Houd er rekening mee dat wanneer de hostsleutels zijn gewijzigd, u een waarschuwing krijgt, zelfs met deze optie:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

Als uw hosts niet vaak opnieuw worden geïnstalleerd, kunt u dit minder veilig (maar handiger voor vaak veranderende hostsleutels) maken met de -oUserKnownHostsFile=/dev/null keuze. Hiermee worden alle ontvangen hostsleutels verwijderd, zodat deze nooit de waarschuwing genereren.


Met 18.04 is er een nieuwe mogelijkheid: StrictHostKeyChecking=accept-new. Van man 5 ssh_config:

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.

185
2018-04-18 09:29



Dit is niet de beste oplossing omdat het ingebouwde beveiligingshulpmiddelen omzeilt. ssh-keyscan heeft de voorkeur als deze beschikbaar is op uw systeem. - Stefan Lasiewski
@StefanLasiewski Hiermee kan de mens in het midden aanvallen als je op niet-vertrouwde netwerken bent. Voor het accepteren van nieuwe sleutels voor vaste hosts, de ssh-keyscan aanpak is gezonder. Voor lokale virtuele machines en andere hosts in vertrouwde netwerken met dynamische / hergebruikte IP-adressen, is de beschreven aanpak goed genoeg. - Lekensteyn
Gewoon om het verschil tussen de twee oplossingen te verduidelijken: de ssh-keyscan oplossing is de enige keer alleen gevoelig voor een man-in-the-middle-aanval ssh-keyscan wordt uitgevoerd. De -oStrictHostKeyChecking=no oplossing is altijd vatbaar voor een man-in-the-middle aanval sshwordt uitgevoerd. - Erik Sjölund


U kunt de volgende opdracht gebruiken om de vingerafdruk voor een server toe te voegen aan uw known_hosts

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

NOTITIE: Vervang <ip-adres> en <hostnaam> door de IP- en dns-naam van de server die u wilt toevoegen.

Het enige probleem hiermee is dat je twee keer een aantal servers in je bekende_hosts zult krijgen. Het is niet echt een probleem, alleen maar vermelden. Om ervoor te zorgen dat er geen duplicaten zijn, kunt u eerst alle servers verwijderen door eerst het volgende uit te voeren:

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

Dus je zou kunnen rennen:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

Eén ding om in gedachten te houden bij het verwijderen om gewoon opnieuw toe te voegen, u verwijdert in feite de beveiliging van het verifiëren van de vingerafdruk. U zou dus zeker niet willen dat dit script wordt uitgevoerd vóór elke uitvoering van uw hulpprogramma-script.


96
2017-10-17 00:24



het doorlopen van soort | uniq en dan op zoek naar dubbele host met awk na zou het script in staat stellen om veranderde hosts te detecteren en gebruikers daar alleen over te waarschuwen, omdat dezelfde host met verschillende sleutels problemen zou kunnen betekenen - Lennart Rolland
Misschien wil je een notitie toevoegen -H hashes hostnamen en adressen. - David Cullen


Ik ben een beetje laat met deze reactie, maar de verstandige manier zou zijn om een ​​ssh-keyscan op de nieuwe machine te doen voordat je de uptime-verzameling uitvoert.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

Het uitschakelen van de sanity-check voor het gemak klinkt als een slecht plan, zelfs als je denkt dat je de volledige controle over de omgeving hebt.


23
2017-11-24 19:47



Dit is eigenlijk waar ik naar op zoek was. Bedankt. - user156516
het uitvoeren van de opdracht hierboven en het niet controleren van de hosttoetsen tegen vingerafdrukken die u buiten de band hebt verkregen, is op dezelfde manier kwetsbaar als StrictHostKeyChecking no - code_monk
@code_monk: nee, dat is het niet. Ik open een eenmalig mogelijkheid tot falen (accepteren van een sleutel van een verkeerde host die moet worden toegevoegd aan bekende hosts). StrictHostKeyChecking no zal herhaal acceptaties toestaan ​​voor andere machines. - tink


Om automatisch een lijst met servers toe te voegen, kunnen we hieronder doen:

Server-IP toevoegen in bestandsservers-lijst

De IP's moeten in het onderstaande formaat worden toegevoegd.

Output van cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Verander boven IP's door de jouwe te vervangen.

Het onderstaande commando voegt alle servers uit de lijst toe.

ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts

0
2018-02-16 07:46