Der öffentliche SSH-Schlüssel wird nicht an den Server gesendet


33

Ich habe seit ein paar Stunden damit zu kämpfen, also ist jede Hilfe sehr dankbar ...

Ich habe zwei Server, die ich beide sshmit öffentlichen Schlüsseln von OSX nutzen kann, überhaupt keine Probleme, also bin ich mir sicher, dass alles in Ordnung ist sshd_config.

Ich versuche, einen Cron-Job für rsyncdie Synchronisierung der beiden Server zu konfigurieren und Server B (Sicherung) sshmit einem öffentlichen Schlüssel auf Server A zu übertragen.

Ich kann nicht für mein ganzes Leben herausfinden, warum meine öffentlichen Schlüssel nicht gefunden werden - sie befinden sich in ~/.ssh/(dh /root/.ssh) und alle Dateiberechtigungen sind für A & B korrekt.

Dies ist die Ausgabe:

debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug3: no such identity: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug3: no such identity: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password

Beachten Sie auch, dass nach privaten Schlüsseln gesucht wird, die es nicht gibt ...

drwx------. 2 root root 4096 May 25 10:15 .
dr-xr-x---. 4 root root 4096 May 24 18:52 ..
-rw-------. 1 root root  403 May 25 01:37 authorized_keys
-rw-------. 1 root root    0 May 25 01:41 config
-rw-------. 1 root root 1675 May 25 02:35 id_rsa_tm1
-rw-------. 1 root root  405 May 25 02:35 id_rsa_tm1.pub
-rw-------. 1 root root  395 May 25 02:36 known_hosts

2
Bitte geben Sie uns die Ausgabe vonls -la /root/.ssh/
mreithub

@mreithub Danke für die schnelle Antwort - oben hinzugefügt.
Danny

3
versuchen Sie, die _tm1aus Ihren Schlüsseldateinamen (dh mv id_rsa_tm1 id_rsaund mv id_rsa_tm1.pub id_rsa.pub)
mreithub

@mreithub Das hat funktioniert! Vielen Dank, aber ich verstehe nicht, warum ich keine anderen Zeichenfolgen an den Dateinamen anhängen kann. Ich mache das auf meinem iMac, um mich ohne Probleme mit den Servern zu verbinden ... dh ich kann id_rsa.tm1.imac.pub ohne Probleme verwenden. Was ist, wenn ich mehrere Schlüssel haben wollte?
Danny

Antworten:


22

Schauen Sie sich Ihre SSH-Manpage an:

   -i identity_file
          Selects a file from which the identity (private key) for public
          key authentication is read.  The default is ~/.ssh/identity for
          protocol   version   1,   and  ~/.ssh/id_dsa,  ~/.ssh/id_ecdsa,
          ~/.ssh/id_ed25519 and ~/.ssh/id_rsa  for  protocol  version  2.
          Identity files may also be specified on a per-host basis in the
          configuration file.  It is possible to have multiple -i options
          (and  multiple  identities  specified  in configuration files).

oder die Manpage ssh_config:

   IdentityFile
          Specifies a file from which the user's DSA, ECDSA,  ED25519  or
          RSA   authentication   identity   is   read.   The  default  is
          ~/.ssh/identity for  protocol  version  1,  and  ~/.ssh/id_dsa,
          ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for proto‐
          col version 2.  Additionally, any identities represented by the
          authentication  agent  will  be  used for authentication unless
          IdentitiesOnly is set.

Sie sehen, es gibt einige spezielle Dateinamen, die versucht werden, wenn Sie keinen Schlüssel angeben. Dies sind auch die Dateien, die Sie in Ihrer Protokollausgabe sehen.

Um einen Schlüssel in einer Datei mit einem anderen Namen zu verwenden, haben Sie drei Möglichkeiten:

  • Geben Sie die Datei mit der obigen -iOption explizit an .
  • Konfigurieren Sie die Datei in Ihrer Client-Konfiguration mit der obigen IdentityFileOption.
  • Fügen Sie den Schlüssel mit Ihrem Agenten hinzu ssh-add.

Für interaktive Sitzungen ist der Agent am flexibelsten. Für Ihren Cron Job ist die -iOption wahrscheinlich die einfachste.


26

Eine fehlerhafte authorized_keys-Datei auf dem Zielhost ist ein weiterer Grund, warum ssh die Meldung "Wir haben kein Paket gesendet" ausgibt und nach einem Kennwort fragt, anstatt pubkey auth zu verwenden:

debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method

Das Problem in diesem speziellen Fall war, dass die öffentlichen Schlüsseldaten, die .ssh/authorized_keysauf dem Zielhost eingefügt wurden , nicht das erste Zeichen enthielten:

sh-rsa AAAA...

Die Lösung bestand einfach darin, die fehlenden "s" hinzuzufügen.

ssh-rsa AAAA...

Und so:-

debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
...
debug1: Authentication succeeded (publickey).

2
Vielen Dank, jedes Mal, wenn ich diesen Fehler erhalte, ist meine authorized_keys-Datei auf dem Remote-Host (Server) fehlerhaft. Ich wünschte, der Fehler hätte nicht zu einem Problem mit dem Client geführt.
Tamale

3
Einfügen in vim ohne vorher 'i' zu drücken!
Jordan Davidson

Für mich schien es nicht falsch zu sein, aber ich habe die Datei gelöscht und auf dem Quellcomputer die ssh-copy-id erneut verwendet, um sie neu zu erstellen. Problem gelöst.
Alvarez

14

Diese genaue Folge von Fehlermeldungen in der Frage kann auch bei einem nicht übereinstimmenden privaten / öffentlichen Schlüsselpaar auf der lokalen Seite auftreten . Nein, das ergibt keinen Sinn, aber ich habe mir lange die Haare ausgerissen, um herauszufinden, was los war.

  • Remote-System A wurde .ssh/mykey.pubkopiert .ssh/authorized_keys.
  • Das lokale System B verfügt über .ssh/mykeyden richtigen privaten Schlüssel, der mit dem öffentlichen Schlüssel von System A übereinstimmt, hat jedoch auch eine .ssh/mykey.pubDatei, bei der es sich um eine Nichtübereinstimmung handelt, möglicherweise die vorherige Version eines ersetzten Schlüssels.

SSH von B nach A ( ssh -i mykey A) schlägt mit den fraglichen Nachrichten fehl, insbesondere, wenn Sie -vvden SSH-Client aktivieren, wird Folgendes angezeigt:

Versuch privater Schlüssel: .ssh / mykey
wir haben kein Paket gesendet , deaktiviere die Methode

Dies ist eine Lüge, weil der eigentliche Schlüssel nicht ausprobiert wurde. Anscheinend wurde die lokale öffentliche Schlüsseldatei mit dem passenden Namen verwendet, um herauszufinden, ob es wahrscheinlich funktioniert, und dann wurde tatsächlich nichts unternommen, als sie nicht übereinstimmten. Keine der Debug-Informationen auf beiden Seiten weist wirklich auf das Problem hin.


Wow! Dieser hat mir auch einiges an Zeit gekostet! Hab ein paar Haare verloren! In meinem Fall war dies auch so, nur mein Pub-Schlüssel befand sich tatsächlich in der clientseitigen Datei authorized_keys, außer dass ganz am Ende ein name @ host-Eintrag enthalten war, wohingegen mein sshd-Host dies nicht tat. Mir war nicht klar, dass Sie die authorized_keys an jedem Ende abgleichen müssen. Tatsächlich glaube ich, dass ich sie noch nie zuvor abgeglichen habe. Dies war nur dann ein Problem, wenn mein Client CentOS 7 war und eine Verbindung zu Ubuntu 12.04 herstellte. Von MacOS oder anderen Ubuntu-Systemen aus zu gehen, hat prima funktioniert.
Gregthegeek

Wie können Sie dieses Problem beheben? Sie haben mein Problem einem T beschrieben. Mein Problem verschärft sich weiter, weil ich zwischen mehreren Systemen hin und her springe. Die Angabe der Datei funktioniert für mich nicht
Madivad

@Madivad Sie beheben das Problem, indem Sie lokale Übereinstimmungen mit öffentlichen / privaten Schlüsseln (oder überhaupt keine öffentlichen Schlüssel) herstellen.
Caleb

@Caleb Das klingt einfacher als es ist, es sei denn (und ich denke, der Penny ist gefallen), das heißt, ich sollte sowohl öffentliche als auch private Schlüssel auf jedes System kopieren, das ich als SSH-Client verwenden möchte? Ich habe versucht, eine Identitätsdatei zu erstellen, aber ich verwende sie offensichtlich falsch
Madivad,

Das Entfernen der verwaisten Datei id_rsa.pub auf dem Client hat dies für mich gelöst. Ich bin gerade auf einem neuen Centos 7-Client, der eine Verbindung zum Ubuntu 12.04-Server herstellt, erneut auf dieses Problem gestoßen. authorised_keys name @ host hat das Problem nicht behoben. Ich habe Verzeichnisse, Perms und genau dieselbe id_rsa-Schlüsseldatei abgeglichen, aber es gab eine zusätzliche id_rsa.pub (auf der Clientseite). Entfernt, jetzt funktioniert es. Ich hatte ssh-keygen ausgeführt, um schnell Verzeichnisse zu erstellen, und dann rsync von einem bekanntermaßen guten System. Es blieb jedoch eine zusätzliche Pub-Datei übrig, die keinem privaten Schlüssel entsprach (sie befand sich nicht in Quell-Rsync). Ich habe die nicht passende Pub-Datei erneut hinzugefügt, um sie zu überprüfen. Stellen Sie sicher, abgestimmt oder entfernen.
gregthegeek

5

Die Standarddateinamen, nach denen ssh sucht, sind id_rsaund id_rsa.pub.

Wenn Sie andere Dateinamen verwenden möchten, müssen Sie entweder sie in ssh_config(mit der IdentityFileEinstellung) oder über den SSH - Befehlszeilenparameter .-i


4

Ich hatte das gleiche Problem bei RedHat. überprüfte die Protokolle und stellte fest, dass das Basisverzeichnis falsche Benutzerrechte hatte.

sshd[2507]: Authentication refused: bad ownership or modes for directory /home/user

Fixing home dir rights löste dies.


4
Willkommen auf der Website von U + L Stack Exchange. Sie könnten Ihre Antwort für andere nützlicher machen, indem Sie ein Beispiel dafür geben, wie die richtigen Berechtigungen aussehen sollten.
Erathiel

Ich hatte ein sehr ähnliches Problem, außer mit ~/.sshdir. Zumindest auf Fedora 28, als die ~/.sshBerechtigungen 0775 waren, konnte ich keine Verbindung mit öffentlichen / privaten Schlüsseln herstellen. Also habe ich die Berechtigungen auf 0755 geändert und wie ein Zauber gearbeitet :)
PovilasB

3

Ein einfacher Weg, um in Debian / Ubuntu zu debuggen, ist: Verbinde dich mit dem Passwort und vervollständige das Protokoll

tail -f /var/log/auth.log

Wenn Sie versuchen, eine Verbindung von einem anderen Terminal herzustellen, wird der Fehler angezeigt ...

In meinem Fall war das / root-Verzeichnis 770 und nicht 700, was die Standardeinstellung ist. Der Fehler war "Authentifizierung abgelehnt: falscher Besitz oder Modi für das Verzeichnis / root".

Repariere das und du bist fertig.


Vielen Dank, Mann! du hast meinen Tag gerettet!
Anthony

Das hat geholfen, es zu klären. Meiner meinte, User suchandsuch von 123.123.123.123 nicht erlaubt, da nicht in AllowUsers gelistet . Ich danke dir sehr!
22.


0

Nach dem Rennen

ssh-copy-id user@remote-host

normalerweise sollte es funktionieren. Wenn dies jedoch fehlschlägt, versuchen Sie Folgendes: Melden Sie sich beim Remote-Host als der Benutzer an, den Sie in Zukunft anmelden möchten, und führen Sie Folgendes aus:

ssh-keygen

Es hat mir geholfen.


0

Was für mich passiert ist, ist, dass ich 2 VMs habe, auf die ich von meinem lokalen Computer aus zugreifen kann (2 Schlüssel id_rsa.pub und id_rsa2.pub). Ich habe festgestellt, dass meine ssh-Verbindung standardmäßig id_rsa.pub für jede Verbindung von ssh user@xx.xx.xx.xx verwendet. Ich habe mein Problem gelöst, indem ich eine Konfigurationsdatei hinzugefügt habe und die Identität angegeben habe, die für jeden Host verwendet werden soll:

vi ~/.ssh/config

Add both hostnames and their identity file as follows:

Host server1.nixcraft.com
  IdentityFile ~/Users/.ssh/id_rsa1
Host server2.nixcraft.com
  IdentityFile /backup/home/aymen/.ssh/id_rsa2

-2

Klient:

vim /etc/ssh/ssh_config

#add your key 
IdentityFile ~/.ssh/yourkey

service sshd restart
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.