Ich habe eine Site als Remote-Git-Repo, die mit einem SSH-Alias von Bitbucket.com abgerufen wird. Ich kann den ssh-agent manuell auf meinem Server starten, muss dies jedoch jedes Mal tun, wenn ich mich über SSH anmelde.
Ich starte den ssh-agent manuell:
eval ssh-agent $SHELL
Dann füge ich den Agenten hinzu:
ssh-add ~/.ssh/bitbucket_id
Dann zeigt es sich, wenn ich es tue:
ssh-add -l
Und ich bin gut zu gehen. Gibt es eine Möglichkeit, diesen Prozess zu automatisieren, damit ich ihn nicht jedes Mal ausführen muss, wenn ich mich anmelde? Auf dem Server wird RedHat 6.2 (Santiago) ausgeführt.
ssh-agent <command>
Wird<command>
als Unterprozess von ausgeführtssh-agent
, sodass Sie eine neue Shell starten. Ich denke du willsteval ssh-agent
..bash_profile
ist spezifisch für Bash,.profile
ist generisch für alle POSIX-Shells.bash
sucht zuerst nach.bash_profile
, dann standardmäßig nach.profile
.ssh-agent
für eine "Standard" -Shell (POSIX-kompatibel) zu spawnen, isteval $(ssh-agent -s)
. Beachten Sie auch, dass Sie sicherstellen müssen, dass Sie den Agenten ordnungsgemäß entfernen, wenn Sie sich abmelden. Daher ist es auch ratsam, nach der Zeile, in der der Agent gestartet wird, einentrap 'kill $SSH_AGENT_PID' EXIT
Eintrag.profile
einzugeben.Antworten:
Bitte gehen Sie diesen Artikel durch. Sie können dies sehr nützlich finden:
http://mah.everybody.org/docs/ssh
Für den Fall, dass der obige Link eines Tages verschwindet, fasse ich das Hauptelement der folgenden Lösung zusammen:
quelle
.bash_profile
mitsource ~/.bash_profile
in der aktuellen Shell - Sitzung. Der Neustart des Computers funktioniert auch, da dadurch die neue Konfiguration trotzdem geladen wird.SSH_ENV="$HOME/.ssh/env"
(dh nur nicht / Umgebung) Warum? sshd verwendet ~ / .ssh / environment (siehe Manpage: PermitUserEnvironment). Github empfiehlt dies auch in ihrer Lösung - help.github.com/articles/…ssh-agent
Startbefehls in .bashrc funktioniert derscp
Befehl nicht.Unter Arch Linux funktioniert Folgendes wirklich gut (sollte auf allen systemd-basierten Distributionen funktionieren):
Erstellen Sie einen systemd-Benutzerdienst, indem Sie Folgendes auf Folgendes setzen
~/.config/systemd/user/ssh-agent.service
:Setup-Shell mit einer Umgebungsvariablen für den Socket (
.bash_profile, .zshrc, ...
):Aktivieren Sie den Dienst, damit er beim Anmelden automatisch gestartet wird, und starten Sie ihn:
Fügen Sie Ihrer lokalen
~/.ssh/config
SSH- Konfigurationsdatei die folgende Konfigurationseinstellung hinzu (dies funktioniert seit SSH 7.2):Dadurch wird der ssh-Client angewiesen, den Schlüssel immer einem laufenden Agenten hinzuzufügen, sodass es nicht erforderlich ist, ihn vorher ssh-hinzuzufügen.
quelle
ssh-agent
Prozess. Vielleicht fehlt mir das Wissen auch nach dem Lesen der Dokumente.SSH_AGENT_PID
Umgebungsvariable setzen :(Alte Frage, aber ich bin auf eine ähnliche Situation gestoßen. Denken Sie nicht, dass die obige Antwort das erreicht, was benötigt wird. Das fehlende Stück ist
keychain
; Installieren Sie es, wenn es noch nicht geschehen ist.Fügen Sie dann die folgende Zeile zu Ihrem hinzu
~/.bashrc
Dadurch wird das gestartet,
ssh-agent
wenn es nicht ausgeführt wird, eine Verbindung hergestellt, wenn dies der Fall ist, diessh-agent
Umgebungsvariablen in Ihre Shell geladen und der SSH-Schlüssel geladen.Wechseln Sie
id_rsa
zu dem privaten Schlüssel, den~/.ssh
Sie laden möchten.Referenz
/unix/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
quelle
keychain --eval id_[yourid file]
zu .bashrceval `keychain --eval id_[yourid file]`
zu.bashrc
. Backticks erforderlich, um die Umgebungsvariablen für den Zugriff auf den laufenden ssh-agent in der aktuellen Shell auszuwerten.-q
Option für den stillen Modus hinzufügen . Weitere Informationen über Schlüsselbund: funtoo.org/KeychainDie akzeptierte Lösung hat folgende Nachteile:
Wenn für Ihre Schlüssel kein Kennwort eingegeben werden muss, empfehle ich die folgende Lösung. Fügen Sie Ihrem
.bash_profile
Ende Folgendes hinzu (bearbeiten Sie die Schlüsselliste nach Ihren Wünschen):Es hat folgende Vorteile:
Es hat mögliche Nachteile:
ssh-add
Befehl beeinflusst nur eine Sitzung, was in der Tat nur unter sehr untypischen Umständen ein Problem darstellt.Beachten Sie, dass mehrere
ssh-agent
Prozesse kein Nachteil sind, da sie nicht mehr Speicher oder CPU-Zeit benötigen.quelle
Fügen Sie dies zu Ihrem hinzu
~/.bashrc
, melden Sie sich dann ab und wieder an, um wirksam zu werden.Dies sollte nur bei der ersten Anmeldung nach jedem Neustart zur Eingabe eines Kennworts führen. Es wird
ssh-agent
so lange wiederverwendet, wie es läuft.quelle
~/.ssh/id_rsa
? Es scheint, dass derssh-add
Teil Ihrer Antwort Standarddateinamen für die Schlüssel erwartet.Also habe ich die oben beschriebenen Ansätze verwendet, aber ich bevorzuge es, dass der Agent stirbt, wenn meine letzte Bash-Sitzung endet. Dies ist etwas länger als die anderen Lösungen, aber es ist mein bevorzugter Ansatz. Die Grundidee ist, dass die erste Bash-Sitzung den SSH-Agenten startet. Anschließend sucht jede weitere Bash-Sitzung nach der Konfigurationsdatei (
~/.ssh/.agent_env
). Wenn dies vorhanden ist und eine Sitzung ausgeführt wird, geben Sie die Umgebung als Quelle ein und erstellen Sie einen Hardlink zur Socket-Datei in/tmp
(muss sich im selben Dateisystem wie die ursprüngliche Socket-Datei befinden). Beim Herunterfahren von Bash-Sitzungen löscht jeder seinen eigenen Hardlink. Die letzte Sitzung, die geschlossen werden soll, stellt fest, dass die Hardlinks über 2 Links verfügen (den Hardlink und das Original). Das Entfernen des prozesseigenen Sockets und das Beenden des Prozesses führen zu 0 und hinterlassen nach dem Schließen der letzten Bash-Sitzung eine saubere Umgebung.quelle
Um noch eine weitere Lösung hinzuzufügen: P, ich habe mich für eine Kombination der Lösungen von @spheenik und @ collin-anderson entschieden.
Könnte etwas eleganter sein, ist aber einfach und lesbar. Diese Lösung:
AddKeysToAgent yes
es sich in Ihrer SSH-Konfiguration befindet, sodass Schlüssel bei Verwendung automatisch hinzugefügt werdenKommentare willkommen :)
quelle
AddKeysToAgent yes
Einstellung. Vielen Dank.Ich habe es gelöst, indem ich dies systemweit zum / etc / profile (oder zum lokalen .profile des Benutzers oder _.bash_profile_) hinzugefügt habe:
Dadurch wird ein neuer ssh-agent gestartet, wenn er nicht für den aktuellen Benutzer ausgeführt wird, oder der Parameter ssh-agent env wird zurückgesetzt, wenn er ausgeführt wird.
quelle
if pgrep -u $WHOAMI $SERVICE >/dev/null
?Benutzer der Fischschale können dieses Skript verwenden , um dasselbe zu tun.
quelle
Ich benutze die ssh-ident Tool.
Von ihrem Mann -page:
quelle
Versuchte paar Lösungen aus vielen Quellen, aber alle schienen zu viel Mühe. Endlich habe ich den einfachsten gefunden :)
Wenn Sie mit zsh und oh-my-zsh noch nicht vertraut sind, installieren Sie es. Du wirst es lieben :)
Dann bearbeiten
.zshrc
Suchen Sie den
plugins
Abschnitt und aktualisieren Sie ihn, um ihnssh-agent
wie folgt zu verwenden :Und das ist alles! Sie müssen
ssh-agent
jedes Mal, wenn Sie Ihre Shell starten, einsatzbereit seinquelle
Ich mag deine Antworten sehr.
cygwin / linux
Dies erleichterte die Arbeit von Hosts erheblich. Ich habe Start- und Endfunktionen kombiniert, um die Sicherheit zu gewährleisten.quelle