Vraag Moet de SSH-sleutel id_rsa worden genoemd?


Ik ben dit probleem een ​​paar keer tegengekomen bij het maken van buildservers met ingetoetste authenticatie.

Ik vroeg me af of iemand anders dit heeft meegemaakt. Ik heb een aantal toetsen voor mijn huidige gebruiker die verbinding kunnen maken met verschillende machines. Laten we zeggen machine1 en machine2. Ik heb mijn openbare sleutel geplakt in hun respectievelijke authorized_keys-bestand. De eerste heb ik de eerste sleutel id_rsa en de tweede belangrijkste bender genoemd.

Wanneer ik verbinding probeer te maken met Bender, krijg ik de volgende uitvoer met mijn uitgebreide ssh-verbinding

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

Het biedt alleen de id_rsa-sleutel, zoals je hierboven kunt zien. Is dit correct? Zo ja, waarom? Hoe krijg ik het om meer sleutels aan te bieden? Ik weet dat het een probleem is dat ik met tussenpozen zie, omdat ik thuis zonder problemen meerdere sleutels heb.

Ik zou ook een overzicht op prijs stellen van hoe de pub en private keys omgaan met de client en de server. Ik dacht dat ik een redelijk goed idee had, maar blijkbaar mis ik iets.

Alstublieft en bedankt.


110
2018-03-17 15:37


oorsprong




antwoorden:


Standaard zoekt ssh naar id_dsa en id_rsa bestanden. De sleutels hoeven niet zo genoemd te worden, je kunt het een naam geven mykey net zo goed, of plaats het zelfs in een andere directory. Als u echter een van deze uitvoert, moet u expliciet verwijzen naar de sleutel in de ssh-opdracht, zoals zo:

ssh user@server -i /path/to/mykey

Als een opdracht niet accepteert -ib.v. sshfs, gebruik de IdentityFile keuze:

sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint

Hoe het werkt

Wanneer u een sleutel genereert, krijgt u twee bestanden: id_rsa (privésleutel) en id_rsa.pub (publieke sleutel). Zoals hun namen suggereren, moet de privésleutel geheim worden gehouden en de publieke sleutel openbaar worden gemaakt.

Public-key-authenticatie werkt met een openbare en een private sleutel. Zowel de client als de server hebben hun eigen sleutels. Bij installatie openssh-server de publieke en private sleutels van de server worden automatisch gegenereerd. Voor de klant moet je dat alleen doen.

Wanneer u (client) verbinding maakt met een server, worden openbare sleutels uitgewisseld. U ontvangt de servers één en de server de uwe. De eerste keer dat u de openbare server van de server ontvangt, wordt u gevraagd om deze te accepteren. Als deze openbare sleutel in de loop van de tijd verandert, wordt u gewaarschuwd omdat er mogelijk een MITM-aanval (Man at the middle) plaatsvindt die het verkeer tussen de client en de server onderschept.

De server controleert of u verbinding mag maken (gedefinieerd in /etc/ssh/sshd_config) en als uw openbare sleutel wordt vermeld in de ~/.ssh/authorized_keys het dossier. Mogelijke redenen waarom de publieke sleutel is geweigerd:

  • /etc/ssh/sshd_config:
    • AllowUsers of AllowGroups is opgegeven, maar uw servergebruiker staat niet in de lijst met groepen of gebruikers (standaard niet gedefinieerd, waardoor gebruikers of groepen zich niet kunnen aanmelden).
    • DenyUsers of DenyGroups is opgegeven en u bevindt zich in de lijst met gebruikers of groepen.
    • U probeert in te loggen als root, maar PermitRootLogin ingesteld op No (standaard yes).
    • PubkeyAuthentication ingesteld op No (standaard yes).
    • AuthorizedKeysFile is ingesteld op een andere locatie en de openbare sleutels zijn niet aan dat bestand toegevoegd (standaard .ssh/authorized_keys, ten opzichte van de thuismap)
  • ~/.ssh/authorized_keys: uw openbare sleutel is niet toegevoegd aan dit bestand (merk op dat dit bestand wordt gelezen als rootgebruiker)

Gebruik meerdere sleutels

Het is niet ongebruikelijk om meerdere sleutels te gebruiken. In plaats van hardlopen ssh user@host -i /path/to/identity_file, je kunt een configuratiebestand gebruiken, ~/.ssh/config.

Algemene instellingen zijn IdentityFile (de sleutels) en poort. De volgende configuratie zal alleen "id_dsa" en "buigmachine" aanvinken bij het verbinden met ssh youruser@yourhost:

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

Als je weglaat Host yourhost, de instellingen zijn van toepassing op alle SSH-verbindingen. Andere opties kunnen ook worden opgegeven voor deze hostmatch, zoals User youruser, Port 2222, etc. Hiermee kunt u verbinding maken met de steno ssh yourhost in plaats van ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender.


136
2018-03-17 15:58



waarom moet ik de sleutel opgeven? het hele punt is, dus ik kan gemakkelijker naar de machine ssh. - myusuf3
@StevenRoose from ssh_config(5): De bestandsnaam kan de tilde-syntaxis gebruiken om naar de basismap van een gebruiker of een van de volgende escape-tekens te verwijzen: '% d' (lokale thuismap van de gebruiker), '% u' (lokale gebruikersnaam), '% l' (lokaal hostnaam), '% h' (externe hostnaam) of '% r' (externe gebruikersnaam). Het is niet mogelijk om wildcards te specificeren, maar dit zou handig genoeg moeten zijn, denk ik. Houd er rekening mee dat een server elke toets die u hebt verzonden, moet onderzoeken, zodat minder toetsen beter zijn. Jokertekens op host-werk, zie de handleiding van ssh_config(5). - Lekensteyn
@therobyouknow U hoeft voor geen enkele machine een uniek sleutelpaar te maken. Meestal hebt u enkele sleutels en voegt u de openbare sleutel van een van de sleutels toe aan de .ssh/authorized_keys bestand op de externe machines. Als u de standaard gebruikt .ssh/id_rsa bestandsnaam (of id_dsa, id_ecdsa of de recente id_ed25519), dan zal ssh dit automatisch proberen en hoeft u niet op te geven IdentityFile in uw config (of de -i path/to/id_file parameter voor ssh). - Lekensteyn
Ik hou van antwoorden die verder gaan dan de vereiste details en neem de tijd om het concept uit te leggen. Geweldig werk! 1 - user2490003
@landed Het is de host van de SSH-server (dit kan een IP-adres of DNS-naam zijn). Ik heb geprobeerd dat gedeelte te verduidelijken, hopelijk helpt het. - Lekensteyn


Met mijn favoriete methode kan de privésleutel automatisch worden geselecteerd

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

SSH vervangt% l door de lokale computernaam,% r door de gebruikersnaam op afstand en% h door de externe host, dus als ik verbinding wilde maken met mijn machine genaamd foo naar bar als gebruiker, voer ik het volgende uit:

ssh bar

En ssh zou automatisch gebruiken:

~/.ssh/foo_user@bar_id_rsa

Omdat de lokale host ook wordt opgeslagen, kunnen hiermee thuismappen worden gedeeld via NFS (verschillende sleutel per computer!) Of zelfs bepalen op welke computer de sleutel moet staan ​​...


30
2018-02-19 18:54





Met het oog op de opmerking van StevenRoose dat het veel langer duurt om veel sleutels op te geven, en ik toevallig met veel sleutels speel, zou ik mijn persoonlijke oplossing willen voorstellen.

Ik maak een symbolische link naar de sleutel die ik op dat moment wil gebruiken, en aangezien die maar zelden verandert, afhankelijk van het project waaraan ik werk, ben ik er blij mee.

Hier heb ik gekoppeld aan mijn sleutels voor machines die draaien onder virtualbox:

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

Men zou ook een echt snel script kunnen toevoegen om over te schakelen naar een andere set zonder de. Handmatig te hoeven typen ln opnieuw bevelen.

Nogmaals, dit is niet alleen een oplossing voor twee sleutels, maar voor een groter aantal kan het werkbaar zijn.


0
2017-10-04 14:43



Ik voeg gewoon een alias in door bash_profile voor elke server waarmee ik werk. Dus voor een server genaamd bob heb ik dit ... alias bob = "ssh bob.example.com -l pete -i / path / to / key" - dan typ ik gewoon bob - en ik doe mee! - Peter Bagnall
Hoewel het soms eenvoudiger is om "dingen voor elkaar te krijgen zoals u al weet", zijn er gemakkelijker benaderingen als u .ssh / configs-sleutels en hosts instelt. Deze opmerking is gericht op zowel de commentaarposter als commentator @ Peter-Bagnall - Crossfit_and_Beer