Wie füge ich mit ssh-add unter Ubuntu dauerhaft einen privaten Schlüssel hinzu? [geschlossen]

474

Ich habe einen privaten Schlüssel, der mit einem Passwort geschützt ist, um über SSH auf einen Server zuzugreifen.

Ich habe 2 Linux-Maschinen (Ubuntu 10.04) und das Verhalten des Befehls ssh-add ist in beiden unterschiedlich.

Auf einem Computer wurde der Schlüssel dauerhaft hinzugefügt, sobald ich "ssh-add .ssh / identity" verwendet und mein Kennwort eingegeben habe, dh jedes Mal, wenn ich den Computer herunterfahre und mich erneut anmelde, ist der Schlüssel bereits hinzugefügt.

In der anderen muss ich den Schlüssel jedes Mal hinzufügen, wenn ich mich anmelde.

Soweit ich mich erinnere, habe ich bei beiden das Gleiche getan. Der einzige Unterschied besteht darin, dass der Schlüssel für den Schlüssel erstellt wurde, der dauerhaft hinzugefügt wird.

Weiß jemand, wie man es auch dauerhaft zum anderen Computer hinzufügt?

Duduklein
quelle
1
Der Agent sollte nur vorübergehend sein. aber es ist möglich, dass Sie den Befehl ssh-add irgendwo in ~ / .bashrc oder so auf einer der beiden Maschinen haben
mirek

Antworten:

632

Eine Lösung wäre, die dauerhafte Aufbewahrung der Schlüsseldateien zu erzwingen, indem Sie sie in Ihre ~/.ssh/configDatei einfügen:

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer

Wenn Sie keine 'config'-Datei im Verzeichnis ~ / .ssh haben, sollten Sie eine erstellen. Es benötigt keine Root-Rechte, also einfach:

nano ~/.ssh/config

... und geben Sie die obigen Zeilen gemäß Ihren Anforderungen ein.

Damit dies funktioniert, muss die Datei chmod 600 haben. Sie können den Befehl verwenden chmod 600 ~/.ssh/config.

Wenn Sie möchten, dass alle Benutzer auf dem Computer den Schlüssel verwenden, geben Sie diese Zeilen ein /etc/ssh/ssh_configund den Schlüssel in einen Ordner, auf den alle zugreifen können.

Wenn Sie den Schlüssel für einen Host festlegen möchten, können Sie in ~ / .ssh / config Folgendes tun:

Host github.com
    User git
    IdentityFile ~/.ssh/githubKey

Dies hat den Vorteil, dass Sie bei vielen Identitäten von einem Server nicht abgelehnt werden, weil Sie zuerst die falschen Identitäten ausprobiert haben. Es wird nur die spezifische Identität ausprobiert.

daminetreg
quelle
82
Die Berechtigungen für die Konfigurationsdatei sollten 600 sein.chmod 600 config
Generalopinion
6
Ich muss mein Passwort für jeden Push, Abruf oder Klon damit eingeben. Wie vermeide ich das?
Asaf
9
Verwenden Sie stattdessen ssh-add ~/.ssh/gitHubKey, um Ihre Schlüsselpassphrase zu speichern. Die von mir vorgeschlagene Lösung bestand darin, sie dauerhaft über Neustarts hinweg festzulegen.
Daminetreg
28
Diese Antwort ist so gut, dass ssh-add nicht existieren sollte. Wer möchte einen Befehl, der "vorübergehend" ein Problem behebt und unerwartet bricht, wenn Sie nur eine Konfigurationsdatei dauerhaft bearbeiten können.
RussellStewart
2
Das Problem ist bei dieser Art von Konfiguration. Wenn Sie dies nicht in .ssh / config für einen bestimmten Host tun, werden alle Schlüssel jedes Mal gegen alle Server ausprobiert.
Daminetreg
118

Dies hat für mich unter Mac OS X Lion nicht das gleiche Problem gelöst. Am Ende fügte ich hinzu:

ssh-add ~/.ssh/id_rsa &>/dev/null

Zu meiner .zshrc (aber .profile wäre auch in Ordnung), die es behoben zu haben scheint.

(Wie hier vorgeschlagen: http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/ )

Aaron
quelle
6
Dies ist meiner Meinung nach besser als die von mir vorgeschlagene Lösung, da ssh-add einen Authentifizierungsagenten verwendet, der sich die Passphrase eines geschützten privaten Schlüssels merken kann, sodass Sie ihn nicht jedes Mal eingeben müssen, wenn Sie versuchen, sich zu authentifizieren. Ein weiterer Vorteil der von Ihnen vorgeschlagenen Lösung besteht darin, dass der SSH-Client, wenn Sie über viele Schlüssel verfügen, keine Schlüssel vorschlägt, die für den Server, zu dem Sie eine Verbindung herstellen möchten, irrelevant sind. Er stellt tatsächlich nur die Schlüssel bereit, die für diesen Server bestimmt sind, und gewinnt. t führt dazu, dass der Server die Verbindung verweigert, weil MaxAuthTries erreicht wurde, während alle in ssh / config aufgelisteten Schlüssel ausprobiert werden.
Daminetreg
1
Danke @daminetreg. Mein besonderes Problem bestand darin, auf einer Entwicklungsmaschine auf Gitosis zugreifen zu müssen, ohne meinen privaten Schlüssel darauf zu übertragen. Diese Lösung (zusammen mit ForwardAgent yesmeiner .ssh/config) hat dieses Problem fantastisch gelöst. Wie sich herausstellt, könnte es ssh-add &>/dev/nulldas Standardverhalten von ssh-addsein, die in Ihrem .sshOrdner gefundenen Schlüssel hinzuzufügen .
Aaron
1
Mein Verständnis ist, dass es in Mac OS einen -K-Schalter gibt: stackoverflow.com/questions/1909651/…
Nicu Tofan
3
@TNick -Kfügt dem Schlüsselbund von OS X Schlüssel hinzu, mit denen sich OS X-GUIs bei fremden Servern authentifizieren. Das Poster in diesem Q stellt eine Verbindung über einen SSH-Tunnel her, stellt jedoch immer noch eine Verbindung zu einem Remote-Server her. A - [SSH-Tunnel] -> B Ich bin auf einem Remote-Server, möchte aber, dass die Authentifizierung anhand der Anmeldeinformationen auf meinem Heimsystem erfolgt. A <- [Auth] - B - [Connect] -> C Hilft -Kalso nicht wirklich, ist aber eine großartige Lösung für die anderen Q.
Aaron
112

Ich habe dieses Problem unter Mac OSX (10.10) mit der Option -K für ssh-add gelöst:

ssh-add -K ~/.ssh/your_private_key

Für macOS 10.12 und höher müssen Sie Ihre ssh-Konfiguration zusätzlich wie hier beschrieben bearbeiten: https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain

Totas
quelle
3
Dies ist eine bessere Antwort für Leute, die es dauerhaft einstellen wollen
Punkrockpolly
12
Daher dieses Bit: "unter Mac OSX (10.10)" ...
Andrew K.
1
Dies ist gut und funktioniert unter Mac OSX, funktioniert aber nicht unter Ubuntu (14.04 bei meinen Tests).
Haxpor
5
Dies funktionierte nicht für mich (unter OSX 10.12.4)
Guptron
2
Laut man ssh-addMacOS High Sierra ssh-add -Kwird die Passphrase im Schlüsselbund gespeichert und nach dem Neustart einfach verwendet ssh-add -A, ohne dass Sie Ihre Passphrase eingeben müssen.
DawnSong
36

Fügen Sie einfach den Schlüsselbund hinzu, auf den in den Ubuntu-Kurztipps https://help.ubuntu.com/community/QuickTips verwiesen wird

Was

Anstatt ssh-agent und ssh-add ständig zu starten, können Sie Ihre ssh-Schlüssel mithilfe eines Schlüsselbunds verwalten. Um den Schlüsselbund zu installieren, klicken Sie einfach hier oder verwenden Sie Synaptic, um die Aufgabe zu erledigen oder apt-get über die Befehlszeile zu erhalten.

Befehlszeile

Eine andere Möglichkeit, die Datei zu installieren, besteht darin, das Terminal (Anwendung-> Zubehör-> Terminal) zu öffnen und Folgendes einzugeben:

sudo apt-get install keychain

Datei bearbeiten

Sie sollten dann die folgenden Zeilen zu $ ​​{HOME} /. Bashrc oder /etc/bash.bashrc hinzufügen:

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
Christian Saiki
quelle
Was genau macht der zweite Befehl aus Neugier? Dies öffnet nur die Berechtigungen für den aktuellen Benutzer?
Vincent Buscarello
1
Dies .ist ein Alias ​​fürsource
Brad Solomon
18

Ich habe @ Aarons Lösung ausprobiert und es hat bei mir nicht ganz funktioniert, da meine Schlüssel jedes Mal neu hinzugefügt wurden, wenn ich einen neuen Tab in meinem Terminal öffnete. Deshalb habe ich es ein wenig geändert (beachten Sie, dass die meisten meiner Schlüssel auch passwortgeschützt sind, sodass ich die Ausgabe nicht einfach an / dev / null senden kann):

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi

Dies überprüft die Ausgabe von ssh-add -l(in der alle hinzugefügten Schlüssel aufgelistet sind) auf einen bestimmten Schlüssel. Wenn dieser nicht gefunden wird, wird er mit hinzugefügt ssh-add.

Wenn ich jetzt mein Terminal zum ersten Mal öffne, werde ich nach den Passwörtern für meine privaten Schlüssel gefragt und erst wieder gefragt, wenn ich meinen Computer neu starte (oder mich abmelde - ich habe ihn nicht überprüft).

Da ich eine Reihe von Schlüsseln habe, speichere ich die Ausgabe ssh-add -lin einer Variablen, um die Leistung zu verbessern (zumindest denke ich, dass dies die Leistung verbessert :)).

PS: Ich bin unter Linux und dieser Code wurde in meine ~/.bashrcDatei aufgenommen. Wenn Sie unter Mac OS X arbeiten, sollten Sie ihn zu .zshrcoder hinzufügen.profile

BEARBEITEN: Wie von @Aaron in den Kommentaren hervorgehoben, wird die .zshrcDatei aus der zshShell verwendet. Wenn Sie dies also nicht verwenden (wenn Sie sich nicht sicher sind, verwenden Sie höchstwahrscheinlich bashstattdessen), sollte dieser Code verwendet werden Gehen Sie zu Ihrer .bashrcDatei.

Nikola Ivanov Nikolov
quelle
3
.zshrcist für die zshShell, die ich anstelle von benutze bash. Wenn Sie bashMac OS X verwenden (Standardeinstellung), ist es .bashrcauch vorhanden.
Aaron
1
Nach der ssh-add -lRückkehr echo $?kann der Code verwendet werden, um zu entscheiden, ob ein Schlüssel hinzugefügt werden soll oder nicht. Ich bin mein Linux-Rechner mit Bash, der ssh-add -lden Schlüsseldateinamen nicht ausgibt. Der Rückkehrcode funktioniert immer.
Bharat G
12

In meinem Fall war die Lösung:

Die Berechtigungen für die Konfigurationsdatei sollten 600 sein. chmod 600 config

Wie in den obigen Kommentaren von Generalopinion erwähnt

Sie müssen den Inhalt der Konfigurationsdatei nicht berühren.

erezmta
quelle
War mir unter Linux Mint 17.1 nicht genug.
Benares
Ich denke nicht, dass 600 Sinn macht. man ssh sagt uns, dass die ~/.ssh/configDatei für den Benutzer gelesen / geschrieben und von anderen nicht beschreibbar ist.
DawnSong
600 wird nur für den Benutzer gelesen und geschrieben
Enthusiasmus
6

Ich hatte das gleiche Problem unter Ubuntu 16.04: Einige Schlüssel wurden permanent hinzugefügt, andere musste ich ssh-addbei jeder Sitzung ausführen . Ich fand heraus, dass die permanent hinzugefügten Schlüssel sowohl einen privaten als auch einen öffentlichen Schlüssel enthielten ~/.sshund die Schlüssel, die bei jeder Sitzung vergessen wurden, nur private Schlüssel im ~/.sshVerzeichnis hatten. Die Lösung ist also einfach: Sie sollten vor der Ausführung sowohl den privaten als auch den öffentlichen Schlüssel kopieren .~/.sshssh-add

PS: Soweit ich aus dem Gnome-Wiki weiß, funktioniert meine Methode dank des Gnome-Schlüsselbund-Tools, das Teil der Gnome-Desktop-Umgebung ist. Daher sollte meine Methode wahrscheinlich nur funktionieren, wenn Sie Gnome oder Gnome-basiertes DE verwenden.

NShiny
quelle
1
Unterschätzte Antwort. Dies löste mein Problem, ohne dass nach zwei Stunden Suche zusätzliche Skripte oder Pakete erforderlich waren.
Etagenklo
Flarkin fabelhaft! Großartige Detektivarbeit. Ich glaube nicht, dass ich das herausgefunden hätte.
Nicorellius
4

Das Hinzufügen der folgenden Zeilen in "~ / .bashrc" löste das Problem für mich. Ich benutze Ubuntu 14.04 Desktop.

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"
reynoldpj
quelle
3

Unter Ubuntu 14.04 (vielleicht früher, vielleicht noch) brauchen Sie nicht einmal die Konsole:

  • Starten seahorseoder starten Sie das Ding, das Sie auf der Suche nach "Schlüssel" finden.
  • Erstellen Sie dort einen SSH-Schlüssel (oder importieren Sie einen)
    • Die Passphrase muss nicht leer bleiben
    • Es wird Ihnen angeboten, den öffentlichen Schlüssel sogar auf einen Server (oder mehr) zu übertragen.
  • Am Ende wird ein SSH-Agent ausgeführt und dieser Schlüssel geladen, aber gesperrt
  • Mit using sshwird die Identität (dh der Schlüssel) über den Agenten abgerufen
  • Bei der ersten Verwendung während der Sitzung wird die Passphrase überprüft
    • und Sie haben die Möglichkeit, den Schlüssel beim Anmelden automatisch zu entsperren
    • Dies bedeutet, dass die Anmeldeauthentifizierung verwendet wird, um die Passphrase des Schlüssels zu verpacken
  • Hinweis: Wenn Sie Ihre Identität weiterleiten möchten (z. B. Agentenweiterleitung), rufen Sie Ihre sshmit auf -Aoder machen Sie dies zur Standardeinstellung
    • Andernfalls können Sie sich auf einem Computer, bei dem Sie sich später bei einem dritten Computer anmelden, nicht mit diesem Schlüssel authentifizieren
Robert Siemer
quelle
3

Ich starte Ubuntu mit zwei id_rsa-Schlüsseln. (eine persönliche für die Arbeit). ssh-add merkt sich einen Schlüssel (persönlichen) und vergisst jedes Mal einen.

Als ich den Unterschied zwischen den beiden herausfand, sah ich, dass mein persönlicher Schlüssel 400 Rechte hatte, während der Firmenschlüssel 600 Rechte hatte. (hatte u + w). Das Entfernen des Benutzerschreibens direkt vom Firmenschlüssel (uw oder auf 400 gesetzt) ​​hat mein Problem behoben. ssh-add merkt sich jetzt beide Schlüssel.

Fholst
quelle
2

Das hat bei mir funktioniert.

ssh-agent /bin/sh
ssh-add /path/to/your/key
Jaseem Abbas
quelle
1

sehr einfach ^ _ ^ zwei Schritte

1. Sie installieren den Schlüsselbund

2. Fügen Sie den folgenden Code zu .bash_profile hinzu

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
LawrenceLi
quelle
12
Ubuntu hat nicht dumm dumm;)
Adam F
1

Für diejenigen, die Fish Shell verwenden, können Sie die folgende Funktion verwenden und sie dann in ~/.config/fish/config.fishoder in einer separaten Konfigurationsdatei in aufrufen ~/.config/fish/conf.d/loadsshkeys.fish. Es werden alle Schlüssel, die mit id_rsa beginnen, in die geladenssh-agent .

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys

Wenn Sie möchten, dass das ssh-agentAuto beim Öffnen eines Terminals automatisch gestartet wird, können Sie dazu tuvistavie / fish-ssh-agent verwenden.

frederickjh
quelle