Passwortloses SSH funktioniert nicht vom Terminal, da ich zur Eingabe der RSA-Passphrase aufgefordert werde

712
robross0606

Wir haben eine CentOS 6.4-Box mit passwortlosem SSH für mehrere andere Systeme eingerichtet. Dies funktioniert gut, wenn ein Terminal als richtiger Benutzer direkt auf dem CentOS-Computer verwendet wird. Wenn ich mich jedoch bei einem anderen System bei einem CentOS-Server anmelde, werde ich zur Eingabe der Passphrase für den RSA-Schlüssel aufgefordert. Warum ist dies notwendig, wenn ich als korrekter Benutzer angemeldet bin?

Wenn wir also drei Maschinen haben (A, B und C). A wurde so eingerichtet, dass er sich passwortlos über SSH mit Maschine B verbinden kann. Das funktioniert gut. Wenn wir jedoch SSH in A von Computer C einschalten und dann von diesem entfernten SSH-Terminal versuchen, SSH in B zu schreiben, ist ein Kennwort erforderlich.

Maschine A enthält Skripts, die auf mehrere andere Maschinen (ohne Kennwort) zugreifen. Wir müssen in der Lage sein, sich remote von Maschine C aus bei Maschine A anzumelden und dann die Skripts zu starten, die auf Maschine B zugreifen.

5
Haben Sie beim Erstellen des Schlüssels eine Passphrase eingegeben? DanteTheEgregore vor 11 Jahren 0

4 Antworten auf die Frage

3
Juliane Holzt

Ihre Frage ist etwas unklar. Es scheint, dass Sie einen SSH-Schlüssel verwenden, der SSH-Schlüssel ist jedoch durch eine Passphrase geschützt. Aber dann sollten Sie tatsächlich nach dieser Passphrase gefragt werden, auch wenn Sie direkt angemeldet sind.

Was ich tun würde:

  1. Erstellen Sie auf Maschine A einen speziellen Benutzer (nennen wir ihn "runcripts"), der zum Ausführen der Skripts verwendet wird.
  2. Erstellen Sie für diesen Benutzer einen SSH-Schlüssel, der nicht durch eine Passphrase verschlüsselt ist.
  3. Konfigurieren Sie sudo so, dass "normale" Benutzer auf Computer A diese Skripts mit den Benutzerrechten von Benutzer "runscripts" ausführen können, ohne ein Kennwort eingeben zu müssen.

Hier ist ein vollständiges Beispiel, wie man das einrichtet:

Erstellen Sie einen neuen Benutzer, bei dem nicht angemeldet werden kann (auf meinem System wird auch eine neue Gruppe mit demselben Namen erstellt, die ich im Folgenden verwenden werde):

# adduser --disabled-password runscripts 

Werden Sie dieser Benutzer und erstellen Sie einen SSH-Schlüssel. Legen Sie keine Passphrase für den Schlüssel fest. Drücken Sie einfach die Eingabetaste an der Eingabeaufforderung für die Passphrase.

# su runscripts $ ssh-keygen 

Fügen Sie den öffentlichen Schlüssel (in ~ / .ssh / id_rsa.pub) zu den Authorized_keys auf dem Zielcomputer hinzu (Computer B in Ihrem Beispiel), und versuchen Sie es in Kürze mit dem SSH-Schlüssel (wodurch auch der öffentliche Remote-Schlüssel zu den bekannten_hosts hinzugefügt wird, so dass es später nicht mehr aufgefordert wird).

$ ssh remoteuser@remote.host 

Zurück auf Maschine A: Fügen Sie der Gruppe die normalen Benutzerkonten hinzu:

# adduser kju runscripts 

Erstellen Sie ein Skript, das den SSH-Schlüssel verwendet, und tun Sie etwas für B:

# cat > /usr/local/bin/script1 #!/bin/sh echo -n "Running as " whoami ssh remoteuser@machineB whoami ^D # chmod +x /usr/local/bin/script1 

Erlauben Sie schließlich den Benutzern in Gruppenläufe, dieses Skript als Benutzerläufe ohne Kennwort auszuführen. Dies ist die Zeile aus / etc / sudoers:

%runscripts ALL=(runscripts) NOPASSWD:/usr/local/bin/script1 

Versuchen Sie nun als einer der Benutzer in Gruppenläufen, das Skript auszuführen:

$ sudo -u runscripts /user/local/bin/script1 Running as user runscripts remoteuser $ 

Wie Sie anhand dieser Ausgabe sehen können, wurde das Skript als Benutzer ausgeführt, der Skripts ausführt. Dann loggte er sich als Benutzer 'remoteuser' bei Maschine B ein und führte den Befehl 'whoami' aus (der dann natürlich 'remoteuser' zurückgab).

Wenn Sie dies tun, hat dies den Vorteil, dass niemand in der Lage ist, den (ungeschützten) SSH-Schlüssel zu stehlen, da auf ihn nur als Benutzerläufe zugegriffen werden kann. Die Benutzer können jedoch nur die vorgegebenen Skripts mit den Berechtigungen dieses Benutzers ausführen.

0
DanteTheEgregore

Sie müssen den Schlüssel ohne Passphrase generieren und die Authentifizierung mit einem öffentlichen Schlüssel verwenden, wenn Sie dies vermeiden möchten. Tun Sie etwas wie:

a@A:~> ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/a/.ssh/id_rsa):  Created directory '/home/a/.ssh'. Enter passphrase (empty for no passphrase):  Enter same passphrase again:  Your identification has been saved in /home/a/.ssh/id_rsa. Your public key has been saved in /home/a/.ssh/id_rsa.pub. The key fingerprint is: 3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A 

Mit anderen Worten, drücken Sie einfach die Eingabetaste, wenn Sie dazu aufgefordert werden Enter passphrase (empty for no passphrase):

https://hkn.eecs.berkeley.edu/~dhsu/ssh_public_key_howto.html

0
LSerni

Du sagtest,

als einer der gleichen Benutzer

Ich nehme an, wir sprechen von mehr als einem Benutzer .

Wenn ich richtig liege, könnte es so aussehen:

  • Sie melden sich als Benutzer bei A an foo
  • Benutzer barauf Maschine B hat im B:/home/bar/.ssh/authorized_keysöffentlichen Schlüssel von foo, dessen Identität in ist A:/home/foo/.ssh/identity.rsa.
  • so kann natürlich foovon A aus und kann ssh bar@Bes ohne Passwort arbeiten .

Wenn sich nun ein Benutzer barvon Maschine C auf Maschine A als sich selbst anmeldet ("einer derselben Benutzer"), dh als bar, wird er bar@A; nicht foo@A. Und wenn er versucht, sich als einzuloggen, lautet bar@Bder Identitätsschlüssel, mit sshdem die Anmeldung durchgeführt wird bar, als; es ist nicht A: / home / foo /.ssh/identity.rsa, sondern A: / home / bar /.ssh/identity.rsa. Und vielleicht, dass Datei ist durch ein Passwort gesperrt.

Also: Überprüfen Sie Ihre Benutzer und welche Identitäten sie verwenden.

0
kenorb

Generieren Sie den Schlüssel entweder ohne Passphrase oder erstellen Sie ein spezielles Skript, das die Passphrase mithilfe einer SSH_ASKPASSVariablen aus dem aktuellen Terminal liest . Dies ist besonders nützlich, wenn Sie ssh-add aus einem verwandten Skript aufrufen. Zum Beispiel:

install -vm700 <(echo "echo 'my_passphrase'") $HOME/.ps cat /path/id_rsa | ssh-add DISPLAY= SSH_ASKPASS=$HOME/.ps - 

Anmerkungen:

  • Das Erstellen eines .psSkripts ist nur eine einmalige Arbeit, der Rest kann in Ihre RC- Dateien eingefügt werden.
  • Es funktioniert nicht, wenn sshein Terminal mit oder verbunden DISPLAYist.
  • Falls Ihr SSH-Agent nicht läuft, falls nicht, führen Sie Folgendes aus: eval "$(ssh-agent -s)"