it-swarm.com.de

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

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

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

In einem Computer wurde der Schlüssel permanent hinzugefügt, sobald ich "ssh-add .ssh/identity" verwendet und mein Kennwort eingegeben habe, d. H. 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 dasselbe getan. Der einzige Unterschied besteht darin, dass der Schlüssel für den Schlüssel erstellt wurde, der permanent hinzugefügt wird.

Weiß jemand, wie man es der anderen Maschine außerdem dauerhaft hinzufügt?

426
duduklein

Eine Lösung wäre, zu erzwingen, dass die Schlüsseldateien dauerhaft gespeichert werden, indem Sie sie in Ihre ~/.ssh/config -Datei einfügen:

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

Wenn Sie keine Konfigurationsdatei 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 chmod 600 ~/.ssh/config verwenden.

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

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

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

Dies hat den Vorteil, dass Sie von einem Server nicht zurückgewiesen werden, wenn Sie viele Identitäten haben, weil Sie zuerst die falschen Identitäten ausprobiert haben. Es wird nur die spezifische Identität geprüft.

559
daminetreg

Dies beantwortete für mich unter Mac OS X Lion nicht das gleiche Problem. Ich fügte hinzu:

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

An 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/ )

110
Aaron

Ich habe dieses Problem unter Mac OS X (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 zusätzlich Ihre ssh-Konfiguration wie hier beschrieben bearbeiten: https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain

103
totas

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

Was

Anstatt ständig ssh-agent und ssh-add zu starten, ist es möglich, den Schlüsselbund zur Verwaltung Ihrer ssh-Schlüssel zu verwenden. Um den Schlüsselbund zu installieren, klicken Sie einfach hier oder verwenden Sie Synaptic, um den Job zu erledigen oder über die Befehlszeile zu empfangen.

Befehlszeile

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

Sudo apt-get install keychain

Datei bearbeiten

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

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
31
Christian Saiki

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. Also habe ich es ein wenig modifiziert (beachte, dass die meisten meiner Schlüssel auch passwortgeschützt sind, so dass ich die Ausgabe nicht einfach nach/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 bewirkt, dass die Ausgabe von ssh-add -l (in der alle hinzugefügten Schlüssel aufgelistet sind) auf einen bestimmten Schlüssel überprüft wird. Wird dieser nicht gefunden, wird er mit ssh-add hinzugefügt.

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

Da ich einen Schlüsselbund habe, speichere ich die Ausgabe von ssh-add -l in 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 ~/.bashrc -Datei kopiert. Wenn Sie unter Mac OS X arbeiten, sollten Sie ihn vermutlich zu .zshrc oder .profile hinzufügen.

BEARBEITEN: Wie von @Aaron in den Kommentaren erwähnt, wird die .zshrc -Datei aus der zsh -Shell verwendet. Wenn Sie stattdessen bash verwenden, sollte dieser Code zu Ihrer .bashrc -Datei gehen.

18

In meinem Fall war die Lösung:

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

Wie oben in den Kommentaren von generalopinion erwähnt

Der Inhalt der Konfigurationsdatei muss nicht berührt werden.

11
erezmta

Ich hatte das gleiche Problem unter Ubuntu 16.04: Einige Schlüssel wurden permanent hinzugefügt, für andere musste ich ssh-add bei jeder Sitzung ausführen. Ich fand heraus, dass die Schlüssel, die permanent hinzugefügt wurden, sowohl einen privaten als auch einen öffentlichen Schlüssel in ~/.ssh hatten und die Schlüssel, die in jeder Sitzung vergessen wurden, nur private Schlüssel in ~/.ssh dir hatten. Die Lösung ist also einfach: Sie sollten beide privaten und öffentlichen Schlüssel nach ~/.ssh kopieren, bevor Sie ssh-add ausführen.

4
NShiny

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

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

3
Fholst

Unter Ubuntu 14.04 (möglicherweise früher, möglicherweise noch) benötigen Sie nicht einmal die Konsole:

  • starte seahorse oder starte das Ding, das du findest, indem du nach "key" suchst
  • erstelle dort einen SSH-Schlüssel (oder importiere einen)
    • die Passphrase muss nicht leer bleiben
    • es wird Ihnen angeboten, sogar den öffentlichen Schlüssel auf einen Server (oder mehr) zu übertragen.
  • am Ende wird ein ssh-agent ausgeführt und dieser Schlüssel geladen, aber gesperrt
  • mit ssh wird die Identität (d. h. 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 bei der Anmeldung automatisch zu entsperren
    • dies bedeutet, dass die Anmeldeauthentifizierung verwendet wird, um die Passphrase des Schlüssels zu umbrechen
  • Hinweis: Wenn Sie Ihre Identität weiterleiten möchten (d. h. die Weiterleitung von Agenten), rufen Sie ssh mit -A auf, oder legen Sie dies als Standard fest.
    • andernfalls können Sie sich nicht mit diesem Schlüssel authentifizieren auf einem Computer, auf dem Sie sich später bei einem dritten Computer anmelden
3
Robert Siemer

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)"
2
reynoldpj

Das hat bei mir funktioniert.

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

sehr einfach ^ _ ^ zwei schritte

1.yum installieren Schlüsselbund

2. Füge den folgenden Code zu .bash_profile hinzu

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
2
LawrenceLi

Für diejenigen, die Fish Shell verwenden, können Sie die folgende Funktion verwenden und sie dann in ~/.config/fish/config.fish aufrufen. Es werden alle Schlüssel, die mit id_rsa beginnen, in den ssh-agent geladen.

# 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 ssh-agent beim Öffnen eines Terminals automatisch gestartet wird, können Sie hierfür tuvistavie/fish-ssh-agent verwenden.

1
frederickjh