Wie kann ich verhindern, dass ich beim Ausführen eines SSH-Vorgangs auf einem Remotehost zur Eingabe einer Passphrase für den Schlüssel aufgefordert werde?


43

Ich bin ssh in einem Remote-Host (Linux, Fedora) und ich möchte dort ssh-Operation (Git mit Bitbucket). Auf dieser Maschine läuft ein ssh-Agent.

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

Wenn ich aber giten möchte, muss ich die Passphrase eingeben

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Hinweis: Wenn ich lokal auf diesem Computer arbeite, werde ich nicht aufgefordert, die Passphrase einzugeben


1
Ich habe es nicht benutzt, aber es gibt einen Befehl ssh-add, der meiner Meinung nach für
solche

Antworten:


80

Meiner Meinung nach die beste Art, ssh zu benutzen

Fügen Sie vor der Verwendung von Git Ihren Schlüssel zu ssh-agent hinzu

Starte ssh-agent wenn nicht gestartet:

$ eval `ssh-agent -s`

Fügen Sie Ihren privaten Schlüssel mit ssh-add hinzu

$ ssh-add ~ / .ssh / id_rsa_key
Passphrase für /home/user/.ssh/id_rsa_key eingeben:
Identität hinzugefügt: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

Überprüfen Sie, ob der Schlüssel hinzugefügt wurde (Parameter ist ein Kleinbuchstabe L):

$ ssh-add -l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: a7: 49: 1a: e5: 4c: 94: 6f
/home/user/.ssh/id_rsa_key (RSA)

Versuchen Sie, eine Verbindung zu Ihrem Git-Server herzustellen:

$ ssh git.example.com

Jetzt können Sie Git ohne zusätzliche Eingabeaufforderungen für Passphrasen verwenden.

Andere Möglichkeiten

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt


aber ich habe Git benutzt, füge deinen Schlüssel zu ssh-agent hinzu, wie geht das? danke
Lilie

@ Lily Entschuldigung, ich verstehe deine Frage nicht.
Roman

1
Dies ist die Lösung, die für mich funktioniert hat.
Skatox

2
Wie mache ich das dauerhaft? Einfach hineinstecken .bashrc?
Oarfish

1
Zu evalIhrer Information , das wird benötigt, weil es Befehle ausgibt, die Umgebungsvariablen wie SSH_AUTH_SOCK exportieren, die benötigt werden. unix.stackexchange.com/questions/351725/…
wisbucky

21

Wenn Sie bereits ausgeführt haben ssh-agent, können Sie den Schlüssel hinzufügen, und Sie müssen die Passphrase einmal und nur einmal für diese Sitzung eingeben.

ssh-add ~/.ssh/id_rsa

Sie sagen nicht, welches Betriebssystem Sie verwenden, aber wenn es sich um Linux und Gnome handelt, kann die Anwendung "Passwörter und Schlüssel" (CLI-Name seahorse:) diese verwalten, sodass sie beim Anmelden entsperrt werden (keine Passphrase erforderlich). . Andere Linux-Desktop-Umgebungen haben ihre eigenen Manager. Ich bin mir nicht sicher, was andere Betriebssysteme hier tun.


3

Der Hauptgrund für die Passphrasenabfrage ist, dass Ihr Schlüssel verschlüsselt ist. Vergleichen Sie diese beiden:

  • nicht verschlüsselt

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • verschlüsselt

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Sie müssen also einen der folgenden Schritte ausführen:

  1. Wenn es verschlüsselt ist, können Sie versuchen, die Verschlüsselung zu entfernen .
  2. Sie verwenden einen falschen Schlüssel. Wenn Sie einen anderen Schlüssel verwenden möchten, geben Sie eine andere Datei an oder bearbeiten Sie Ihre ~/.ssh/configund geben Sie eine andere Identitätsdatei an ( IdentityFile).
  3. Führen Sie ssh-add -lden Befehl aus, um alle Ihre Identitäten aufzulisten (und mit Ihrer lokalen zu vergleichen), und überprüfen Sie bei Stash, ob Sie die richtigen Schlüssel verwenden (diese sind in der Stash-Konfiguration vorhanden).
  4. Wenn Sie die Passphrase kennen und sie automatisieren möchten, versuchen Sie Folgendes:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Fehlerbehebung:

  1. Überprüfen Sie, ob Ihr SSH-Agent ausgeführt wird ( eval "$(ssh-agent -s)").
  2. Führen Sie git über: GIT_TRACE=1 git pulloder mit GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+) erneut aus, um Ihren Befehl erneut zu debuggen.
  3. Sie können versuchen, die Frage nach der Passphrase zu umgehen (die sie umleitet true), aber ich glaube nicht, dass es helfen wird. Wenn es danach fragt, gibt es einen Grund dafür und es ist grundsätzlich erforderlich.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

Das ssh-addProgramm startet einen Agenten, der Ihre Passphrase speichern (und bereitstellen) kann. Die Remoteverwendung erfolgt über ein übergeordnetes Element Ihrer interaktiven Shell (damit der Agent nicht gestoppt wird).

Hier sind einige verwandte Fragen:

Jetzt ... Remote- Verbindung herstellen. In der Regel meldet sich Ihr Befehl nicht als solcher an, sodass er nicht gestartet wird ssh-add. Sie können dies umgehen, indem Sie ein Skript ausführen, das

  • beginnt ssh-agent
  • beginnt ssh-add
  • fügt deinen Schlüssel hinzu
  • Führt den gewünschten Befehl aus.

Die Schwachstelle ist der zweite Schritt: Sie werden immer noch zur Eingabe der Passphrase aufgefordert, es sei denn, Sie schwächen Ihre Sicherheit, indem Sie einen Schlüssel ohne Passphrase verwenden . Einige Leute tun dies, die meisten raten davon ab.


ssh-addstartet den Agenten nicht. Es wird eine Verbindung zu einem bereits laufenden Agenten hergestellt.
ams

Danke - ich bin es gewohnt, dies in separaten Skripten zu tun und habe den fehlenden Teil übersehen.
Thomas Dickey

0

Sie können die Passphrase Ihres Schlüssels einfach mit dem folgenden Befehl entfernen

ssh-keygen -p

Geben Sie bei der ersten Eingabeaufforderung den Dateipfad ein (oder drücken Sie die Eingabetaste, um die Standardeinstellung zu ändern). Geben Sie bei der zweiten Eingabeaufforderung die alte Passphrase ein. Bei der nächsten Eingabeaufforderung drücken Sie einfach die Eingabetaste, um die Passphrase zu deaktivieren

Sieht so aus, als wäre das der einfachste Weg!


0

Sie werden weiterhin aufgefordert, das Passwort einzugeben, um den privaten Schlüssel zu entschlüsseln, selbst wenn dieserssh-agent in das Remote-System geladen wird, bis der entsprechende öffentliche SSH-Schlüssel hinzugefügt wird ~/.ssh/authorized_keys.

Reproduzieren:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

Verwirrend genug. In diesem Fall ist ein Remote-SSH-Anmeldekennwort ausreichend.

Ich kann spekulieren, dass dies das Hinzufügen Ihres öffentlichen Schlüssels (der mit dem verschlüsselten privaten Schlüssel gekoppelt ist) verhindert, ohne das Verschlüsselungskennwort für den entsprechenden privaten Schlüssel zu kennen. Es ist sowieso ein einmaliges Anmeldeverfahren per Fernzugriff.

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.