Wie vermeide ich, jedes Mal nach einer Passphrase gefragt zu werden, wenn ich auf Bitbucket drücke?

217

Ich habe mein ssh-Zeug mit Hilfe dieses Handbuchs eingerichtet , und es hat früher gut funktioniert (ich konnte es ausführen, hg pushohne nach einer Passphrase gefragt zu werden). Was hätte zwischen damals und heute passieren können, wenn ich bedenke, dass ich immer noch dasselbe Basisverzeichnis verwende.

$ cat .hg/hgrc 
[paths]
default = ssh://[email protected]/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://[email protected]/tshepang/bloog
searching for changes
...
Tshepang
quelle

Antworten:

337

Sie müssen einen ssh-Agenten verwenden. Kurze Antwort: versuchen Sie es

$ ssh-add

vor dem schieben. Geben Sie Ihre Passphrase ein, wenn Sie dazu aufgefordert werden.

Wenn Sie noch keinen ssh-Agenten ausführen, wird die folgende Meldung angezeigt:

Could not open a connection to your authentication agent.

In dieser Situation können Sie eine starten und Ihre Umgebung so einrichten

eval $(ssh-agent)

Dann wiederholen Sie den ssh-addBefehl.

Es lohnt sich, einen Blick auf die Manpage von ssh agent zu werfen .

jmtd
quelle
2
Worum geht es bei der evalEingabe ssh-agent?
James McMahon
4
Es werden einige Befehle angezeigt, mit denen Sie es verwenden können, und sie werden nicht für Sie ausgeführt. evaltut das excuting.
Tshepang
Nicht im Zusammenhang mit der ursprünglichen Frage, aber wenn Sie diese Probleme weiterhin mit GitHub, Bitbucket usw. haben, stellen Sie sicher, dass Sie die git / ssh-URL verwenden, nicht die http, die Sie weiterhin nach Benutzername und Kennwort fragt.
Czechnology
Und wenn Sie keinen Standardschlüssel haben oder mehrere hinzufügen möchten,ssh-add /path/to/key
hoosierEE
46

Ein Weg, dies zu lösen, ist mit ssh-agentund ssh-add:

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

Danach wird die Passphrase für die aktuelle Sitzung gespeichert. und wird nicht noch einmal gefragt.

stefano
quelle
7
Die meisten Menschen wollen überhaupt nicht auf ihre Passphrasen abgehört werden.
Connexo
26

Ich verwende Keychain für die Verwaltung von SSH- Schlüsseln. Es ist auch in Debian und damit vermutlich Ubuntu mit verfügbar

apt-get install keychain

Hier ist die Seite mit dem Debian-Schlüsselbundpaket . Wie Sie sehen, ist das Projekt nicht sehr aktiv, funktioniert aber für mich. Ich habe dies auch in einer anderen Antwort hier etwas kommentiert

Faheem Mitha
quelle
2
//, das hat bei mir funktioniert. Es ist viel besser als ssh-agent, da ich mein ssh-Schlüsselkennwort nicht jedes Mal eingeben muss, wenn ich ein Terminal öffne .
Nathan Basanese
@ NathanBasane Wollen Sie damit sagen, dass Sie bei Verwendung eines Schlüsselbunds das SSH-Schlüsselkennwort nicht jedes Mal eingeben müssen, wenn Sie ein Terminal öffnen? Wie konfigurierst du das? Da der Schlüsselbund jedes Mal, wenn ich das Terminal öffne, nach dem Kennwort fragt, wird es nur beim ersten Öffnen nach dem Booten angezeigt. Ich möchte das Passwort nicht jedes Mal eingeben.
m4l490n
@ m4l490n Nein, wenn Sie einen Schlüsselbund verwenden, müssen Sie das SSH-Schlüsselkennwort nicht jedes Mal eingeben, wenn Sie ein Terminal öffnen. Sie müssen es jedoch nach dem Booten einmal eingeben. Die Passphrase wird nicht auf der Festplatte gespeichert - das wäre unsicher.
Faheem Mitha
Für mich fragt es jedes Mal, wenn ich mich anmelde (ich habe ein Git-Repository + SSH-Schlüssel auf einem Remote-Server und jedes Mal, wenn ich ein "Git-Pull" mache, muss ich die Passphrase eingeben)
Martin Thoma
@MartinThoma Das sieht falsch aus. Überprüfen Sie, ob Sie .ssh richtig konfiguriert haben. Insbesondere ist Ihre Shell richtig konfiguriert? Wenn es bei Ihnen immer noch nicht funktioniert und Sie es nicht herausfinden können, können Sie eine Frage stellen.
Faheem Mitha
13

Erstellen Sie die folgende ~ / .ssh / config-Datei (oder bearbeiten Sie sie, falls vorhanden):

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa
ness-EE
quelle
Aber ich verwende für jeden Dienst ein anderes Schlüsselpaar ...
connexo
@connexo Sie können das Platzhalter-Sternchen durch Ihren individuellen Hostnamen und 'id_rsa' durch Ihren entsprechenden privaten Schlüssel ersetzen
ness-EE
1
Ich musste IgnoreUnknown AddKeysToAgent,UseKeychaingerade oben hinzufügen UseKeychain yes.
consideRatio
1
Ich erhalte folgende Fehlermeldung: "Falsche Konfigurationsoption: usekeychain" in der Zeile "UseKeychain yes".
m4l490n
@ m4l490n: Es scheint, dass die UseKeychainOption in OpenSSH 7.1p2 (28.02.2016) hinzugefügt wurde. Möglicherweise haben Sie eine frühere Version. openssh.com/txt/release-7.2
chus
6

Zur Vereinfachung ist die optimale Methode eine Kombination der Antworten von jmtd und Faheem .

Mit ssh-agentallein bedeutet , dass eine neue Instanz des ssh-agentBedarfs für jedes neues Terminals erstellt werden , die Sie öffnen. keychainBei der Initialisierung werden Sie nach der Passphrase für den / die privaten Schlüssel gefragt und diese gespeichert. Auf diese Weise ist Ihr privater Schlüssel durch ein Passwort geschützt, aber Sie müssen Ihr Passwort nicht immer wieder eingeben.

Das Arch-Wiki empfiehlt, den Schlüsselbund von /etc/profile.d/oder Ihrem Shell-Profil wie .bash_profileoder zu initialisieren .bashrc. Dies hat den Nachteil, dass Ihr Schlüsselbund initialisiert wird, sobald Sie ein Terminal öffnen.

Ein flexiblerer Ansatz ist die Kombination keychainmit einer bestimmten tmuxSitzung. Also, in .bash_profile:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

... und dann ist es nur ein Fall, die gesicherte tmuxSitzung nach Bedarf zu starten (von einer Tastatur aus gestartet):

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

Jetzt wird Ihr Schlüsselbund nur einmal initialisiert, wenn Sie diese bestimmte tmuxSitzung starten . Solange diese Sitzung besteht, können Sie auf diese sshSchlüssel zugreifen und auf Ihre Remote-Repositorys pushen.

jasonwryan
quelle
Wie bringe ich das auf einem Remote-Computer zum Laufen? Ich habe das zweite Skript geändert, um nach $ SSH_CLIENT zu suchen. Wenn es existiert, führe urxvtc nicht aus, sondern nur tmux. Das funktioniert, aber das Problem ist der Abschnitt .bash_profile. Wenn ich mich zum ersten Mal in der Box anmelde, heißt es "Server nicht gefunden: Verbindung abgelehnt", was die Ausgabe von "tmux ls" ist. Wenn ich dann das zweite Skript ausführe, startet tmux entweder eine neue Sitzung oder stellt eine Verbindung zu einer vorhandenen her, aber es gibt keine Eingabeaufforderung für den Schlüsselbund. Wenn ich dann die Sitzung verlasse, wartet dort die Schlüsselbund-Eingabeaufforderung.
jonyamo
Ich habe die Antwort aktualisiert, um die tmux-Ausgabe zum Schweigen zu bringen, wenn keine Sitzung stattfindet.
Jasonwryan
Vielen Dank, aber das hat das Problem mit dem Schlüsselbund immer noch nicht gelöst. tmux erstellt die neue Sitzung, wechselt jedoch direkt zu einer leeren Eingabeaufforderung. Erst wenn ich die tmux-Sitzung verlasse, erscheint die Eingabeaufforderung für den Schlüsselbund, in der ich nach meinem Passwort gefragt werde.
jonyamo
Ich denke, ich sollte aufhören, keychain zu sagen, da keychain nur in .bash_profile ausgeführt wird. Das Problem liegt in der Ausführung von ssh-add. Wenn ich allerdings ssh-add nach dem Erstellen der tmux-Sitzung manuell ausführe, funktioniert es.
jonyamo
1
Überspringen Sie das zweite Skript und starten Sie einfach Ihre sichere tmux-Sitzung von .profile- auf diese Weise erhalten Sie die Aufforderung zur Eingabe von Schlüsseln, sobald Sie sich anmelden.
jasonwryan
0

Sie können verwenden sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Sie müssen nur hinzufügen, sshpass -p yourpassphrasebevor Sie Ihren üblichen sshBefehl anhängen .

belka
quelle
2
Das klingt nach einer wirklich dummen Idee. Würde das nicht dazu führen, dass Ihr Passwort in Ihrem Shell-Verlauf im Klartext angezeigt wird?
Connexo
Genau, aber sollen Sie Ihre Sitzung nicht auch mit einem Passwort schützen?
Belka
1
Selbst wenn ja, wie oft sitzt ein Kollege neben Ihnen und hilft Ihnen / lernt von Ihnen?
Connexo