Die SSH-Anmeldung kann nicht ohne Eingabe eines Kennworts eingerichtet werden

8

Ich richte automatisch die SSH-Anmeldung ein, ohne ein Passwort für einen Server einzugeben.

cd ~/.ssh

ssh-keygen

ssh-copy-id -i ~/.ssh/id_rsa.pub tim@server1

Es funktioniert auf dem Server.

Später habe ich dasselbe auf einem anderen Server gemacht.

ssh-copy-id -i ~/.ssh/id_rsa.pub tim@server2

Sofort ich ssh tim@server2, aber es erfordert immer noch mein Passwort. Habe ich etwas falsch gemacht? Was sind mögliche Gründe, warum ich mich auf dem zweiten Server nicht erfolgreich eingerichtet habe? (Beachten Sie, dass auf dem zweiten Server Kerberos und das Andrew-Dateisystem ausgeführt werden.)

$ ssh -v tim@server2
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to server2 [...] port 22.
debug1: Connection established.
debug1: identity file /home/tim/.ssh/id_rsa type 1
debug1: identity file /home/tim/.ssh/id_rsa-cert type -1
debug1: identity file /home/tim/.ssh/id_dsa type -1
debug1: identity file /home/tim/.ssh/id_dsa-cert type -1
debug1: identity file /home/tim/.ssh/id_ecdsa type -1
debug1: identity file /home/tim/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tim/.ssh/id_ed25519 type -1
debug1: identity file /home/tim/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<3072<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA xxx
debug1: Host 'server2' is known and matches the RSA host key.
debug1: Found key in /home/tim/.ssh/known_hosts:70
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information


debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/tim/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Trying private key: /home/tim/.ssh/id_dsa
debug1: Trying private key: /home/tim/.ssh/id_ecdsa
debug1: Trying private key: /home/tim/.ssh/id_ed25519
debug1: Next authentication method: keyboard-interactive
Password:

Ich habe Anthons Methode zur Verwendung von Diffie-Hellman-Schlüsseln ausprobiert, aber ich werde trotzdem nach meinem Passwort gefragt.

$ cd ~/.ssh
$ ssh-keygen -t dsa
$ ssh-copy-id -i ~/.ssh/id_dsa.pub tim@server2
$ ssh -v tim@server2
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to server2 [...] port 22.
debug1: Connection established.
debug1: identity file /home/tim/.ssh/id_rsa type 1
debug1: identity file /home/tim/.ssh/id_rsa-cert type -1
debug1: identity file /home/tim/.ssh/id_dsa type 2
debug1: identity file /home/tim/.ssh/id_dsa-cert type -1
debug1: identity file /home/tim/.ssh/id_ecdsa type -1
debug1: identity file /home/tim/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tim/.ssh/id_ed25519 type -1
debug1: identity file /home/tim/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<3072<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA ...
debug1: Host 'server2' is known and matches the RSA host key.
debug1: Found key in /home/tim/.ssh/known_hosts:70
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Unspecified GSS failure.  Minor code may provide more information


debug1: Unspecified GSS failure.  Minor code may provide more information
No Kerberos credentials available

debug1: Next authentication method: publickey
debug1: Offering DSA public key: /home/tim/.ssh/id_dsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Offering RSA public key: /home/tim/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
debug1: Trying private key: /home/tim/.ssh/id_ecdsa
debug1: Trying private key: /home/tim/.ssh/id_ed25519
debug1: Next authentication method: keyboard-interactive
Password:
Tim
quelle
Ist Ihr Home-Verzeichnis nach dem Anmelden gemountet?
Muru
Nach jedem Login in der Vergangenheit war mein Zuhause immer montiert.
Tim
Ja, sobald Sie sich angemeldet haben, erhalten Sie Ihr Home-Verzeichnis - aber was ist, bevor die Anmeldung abgeschlossen ist? (Betrachten Sie verschlüsselte Home-Verzeichnisse oder ein Netzwerk-Home-Verzeichnis usw.)
Muru
Ich habe gehört, server2verwendet Andrew Dateisystem. Bedeutet das, dass mein Zuhause nicht bereitgestellt wird, bevor die Anmeldung abgeschlossen ist? Wie kann ich es für Ihre Frage herausfinden?
Tim
Ich bin nicht sicher, wie das Andrew-Dateisystem funktioniert, aber wenn Sie ein anderes Login auf demselben Server haben, verwenden Sie es und prüfen Sie, ob Sie den Inhalt des timHome-Verzeichnisses sehen können.
Muru

Antworten:

10

Sie erwähnen, dass der zweite Server das Andrew File System (AFS) verwendet.

Ich habe damit nicht gearbeitet, aber nach meinem Verständnis ist AFS ein Kerberos-gesichertes Dateisystem, für dessen Funktion ein Kerberos-Ticket erforderlich ist. Das bedeutet, dass Sie im Kerberos-Bereich Ihrer Site angemeldet sein müssen, um auf Ihr Home-Verzeichnis zugreifen zu können.

Wenn Sie sich mit einem Kennwort anmelden, server2wird es wahrscheinlich so eingerichtet, dass Sie sich über PAM bei Ihrem Kerberos-Realm anmelden. Wenn Sie jedoch SSH-Schlüssel verwenden, erhalten Sie server2nicht die erforderlichen Informationen, und Sie können nicht auf Ihr Home-Verzeichnis zugreifen.

Glücklicherweise ssh -vkönnen wir aus der Ausgabe in Ihrer Frage schließen, dass auf Ihrem Server die GSSAPIAuthentifizierung aktiviert ist. Dies sollte es Ihnen ermöglichen, sich ohne Passwort anzumelden, vorausgesetzt, Sie haben ein gültiges Kerberos-Ticket für Ihren Realm. Mach Folgendes:

  • Melden Sie sich bei an server2und führen Sie das klistProgramm aus. Dies gibt etwas in der folgenden Richtung zurück:

    Ticket cache: FILE:/tmp/krb5cc_2000
    Default principal: [email protected]
    
    Valid starting     Expires            Service principal
    28-05-15 15:01:31  29-05-15 01:01:31  krbtgt/[email protected]
        renew until 29-05-15 15:01:28
    28-05-15 15:02:04  29-05-15 01:01:31  IMAP/[email protected]
        renew until 29-05-15 15:01:28
    

    Suchen Sie nach der Zeile, die mit beginnt Default principal:. Hier erfahren Sie, was Ihr Kerberos-Prinzipal ist (im obigen Beispiel [email protected]). Schreib das auf. Beachten Sie, dass es sich nicht um eine E-Mail-Adresse handelt und dass zwischen Groß- und Kleinschreibung unterschieden wird. dh der Auftraggeber endet mit EXAMPLE.ORG, nicht example.org.

  • Führen Sie auf Ihrem Client-Computer kinitden Namen Ihres Principals aus (im obigen Beispiel also kinit [email protected]). Wenn alles gut geht, werden Sie beim klisterneuten Ausführen feststellen, dass sich auf Ihrem lokalen Computer ein Ticket-Cache befindet.
  • Wenn Sie jetzt ausführen ssh -K server2, sollten Sie sich anmelden können und das System sollte nicht nach einem Kennwort fragen.

Bitte beachten Sie, dass ein Ticket-Cache aufgrund der Funktionsweise von Kerberos nur eine begrenzte Gültigkeit hat. Es ist nicht möglich, einen Ticket-Cache anzufordern, dessen Gültigkeit länger ist als vom Realm-Administrator konfiguriert (normalerweise etwa 10 Stunden). Sobald Ihr Ticket abgelaufen ist, müssen Sie es kiniterneut ausführen und Ihr Passwort erneut eingeben.

Wouter Verhelst
quelle
Vielen Dank. "Führen Sie auf Ihrem Client-Computer kinit aus". Meinen Sie damit, dass ich Kerberos auf meinem lokalen Ubuntu installieren muss?
Tim
Ein Teil der Kerberos-Tools, ja. Die erforderlichen Werkzeuge finden Sie im krb5-userPaket.
Wouter Verhelst
Sollte ich rsa oder dsa verwenden, wenn ich die öffentlichen Schlüssel erstelle und auf den Server kopiere? (Ich folgte Anthons Vorschlag, jetzt dsa zu verwenden)
Tim
Aufgrund von AFS auf dem Server können Sie keine öffentlichen SSH-Schlüssel verwenden. Stattdessen müssen Sie Kerberos verwenden. Also ist es egal ;-)
Wouter Verhelst
Sind GSSAPI, dsa und rsa alle Authentifizierungsmethoden?
Tim
5

Sie sollten versuchen, eine Verbindung zu server2 herzustellen mit:

ssh -v tim@server2

server1Wenn Sie eine Verbindung herstellen, erfahren Sie genau, wo sich die beiden Server unterscheiden.

Höchstwahrscheinlich gibt es bei /etc/ssh/sshd_configbeiden Maschinen einen Unterschied . wo server2oder bei Ihnen ~/.sshsind Zugänglichkeitsprobleme (nicht ausreichend eingeschränkt).

An der -vAusgabe können Sie erkennen, dass Sie einen privaten RSA-Schlüssel zur Überprüfung gegen (in /home/tim/.ssh/id_rsa) anbieten , aber es sieht so aus, als ob server2nur Diffie-Hellman unterstützt wird (und versucht, /home/tim/.ssh/id_dsawas wahrscheinlich nicht einmal vorhanden ist).

Anthon
quelle
danke, ich habe mit der Ausgabe der Ausführung Ihres Befehls aktualisiert. Nicht sicher, was es bedeutet
Tim
@ Tim hat meine Antwort aktualisiert. Sie sollten sich beim Server2-Administrator erkundigen, warum RSA keine privaten / öffentlichen Schlüssel unterstützt.
Anthon
Gibt es neben der Frage an den Administrator (von der ich denke, dass es aufgrund meiner Erfahrungen unmöglich ist, Änderungen vorzunehmen) eine Möglichkeit, mit den Erwartungen des Servers zu arbeiten?
Tim
@Tim, stellen Sie zunächst sicher, dass ~/.sshauf dem Server tatsächlich Ihre autorisierten Schlüssel installiert sind ( ~/.ssh/authorized_keys). Dann könnten Sie versuchen, ssh-keygenein Diffie-Hellman-Schlüsselpaar zu generieren ssh-keygen -t dsaund dieses zu kopieren.
Anthon
(1) Auf ~/.ssh/authorized_keysdem Server befindet sich eine Datei . Bedeutet das, dass die autorisierten Schlüssel installiert sind? (2) Wie soll ich das generierte Diffie-Hellman-Schlüsselpaar auf den Server kopieren? von scp ~/.ssh/id_dsa.pub tim@server2:~/.ssh/authorized_keys? Wird das ~/.ssh/authorized_keysauf dem Server überschrieben ?
Tim
4

Fügen Sie den folgenden Eintrag in den Clientcomputer ein, von dem aus Sie ssh ausführen möchten.

Konfigurationsdatei: /etc/ssh/ssh_config

GSSAPIAuthentication no

Danach können Sie zur Maschine ssh.

Wenn Sie keine Bearbeitungsberechtigungen für diese Datei haben, können Sie auch hinzufügen

Host *
  GSSAPIAuthentication no

to ~/.ssh/config(erstelle diese Datei, wenn sie nicht existiert)

Sudhams Reddy
quelle