Wie füge ich eine Identität für SSH dauerhaft hinzu?

37

Ich muss ssh-add <key>jedes Mal laufen, wenn ich in einen Webserver ssh muss. Gibt es eine Möglichkeit, die ID dauerhaft hinzuzufügen, sodass ich die Identitäten nicht bei jedem Login erneut hinzufügen muss?

BEARBEITEN: Der Schlüssel ist eine PEM-Datei, die ich von einem Cloud-Dienst heruntergeladen habe.

theTuxRacer
quelle

Antworten:

40

Generieren Sie Ihren Schlüssel wie gewohnt: ssh-keygenund legen Sie diesen Schlüssel auf den Remote-Server, mit ssh-copy-iddem er mit den akzeptierten Schlüsseln des Remote-Servers synchronisiert wird.

ssh-keygen
ssh-copy-id user@host

Sie werden aufgefordert, Ihr Kennwort einzugeben, und es werden alle erforderlichen Schritte ausgeführt, um Ihren .pubSchlüssel mit dem Remote-SSH-Server zu verbinden.

Standardmäßig werden alle Ihre .pub-Schlüssel auf den Remote-Server kopiert. Wenn Sie gerade Ihren Schlüssel mit erstellt haben, ssh-keygenist dies kein Problem (weil Sie nur einen haben!). Wenn Sie jedoch mehrere Schlüssel haben, können Sie nur einen bestimmten Schlüssel mit dem -iFlag kopieren .

ssh-copy-id -i ~.ssh/key_name.pub user@host

Ersetzen key_name.pubdurch den Namen des Schlüssels.

Marco Ceppi
quelle
4
Für jemanden wie mich (oder den Fragesteller), dessen einziger Kontakt mit ssh darin besteht, auf Cloud-gehostete Server zuzugreifen, auf denen der Webservice den Schlüssel erstellt und ihn mir gibt (in meinem Fall AWS-Server), ist diese Antwort schwer zu beantworten ohne nennenswerte Hintergrundforschung zu verstehen. Ich habe zum Beispiel noch nie benutzt ssh-keygenoder ssh-copy-id. Auf der anderen Seite sind Antworten wie diese für mich bei meinem Kenntnisstand völlig klar und nützlich. Es liegt an Ihnen, ob Sie Ihre Antwort in irgendeiner Weise optimieren möchten, um unwissenden Menschen wie mir zu helfen. :)
Mark Amery
Die Antwort setzt voraus, dass ich einen neuen Schlüssel generieren möchte. Was ist, wenn ich einen vorhandenen Schlüssel einfach mit dem Schlüsselbund registrieren möchte?
donquixote
@donquixote: siehe die Antwort unten von user626052.
naught101
7

Sie können einen SSH-Schlüssel mit dem folgenden Befehl generieren:

ssh-keygen

Dann können Sie Ihren Schlüssel auf den Server kopieren mit:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

Jetzt können Sie sich automatisch in Ihren Webserver einloggen

Arthur Knopper
quelle
1
Um den Schlüssel auf den Server zu kopieren, können Sie einfach ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernamebzw. ~/.ssh/id_rsa.pubverwenden. Wenn Sie den Standardnamen für die Schlüsseldatei verwenden, müssen Sie ihn nicht einmal angeben.
Carsten Thiel
5

steck das in deine ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 
user626052
quelle
3
Dies ist die einzige Antwort, die die Frage tatsächlich beantwortet. Die anderen fügen nur den öffentlichen Standardschlüssel zu einem einzelnen Zielserver hinzu, was ärgerlich ist, wenn Sie zwei + separate für verschiedene Servergruppen haben.
naught101
3

Wenn Ihr Schlüssel kein Kennwort enthält und als eine der Dateien benannt ist, nach denen ssh bei der Identifizierung ( ~/.ssh/id_dsaoder ~/.ssh/id_rsa) sucht , sollten Sie ihn nicht zu Ihrem Agenten hinzufügen müssen.

ABER. Wenn die geringste Wahrscheinlichkeit besteht, dass diese Dateien gestohlen werden, hätten Sie nur jedem Zugriff auf die Server gewährt, auf denen Sie diese Identität verwenden. Kurz gesagt, pwned.

IMHO sind private Schlüssel ohne Passwort eine schlechte Praxis und sollten nur in Umgebungen verwendet werden, in denen dies ~/.ssh/authorized_keyssehr restriktiv ist.

zuzur
quelle
1
ssh-agent kann Ihren entschlüsselten privaten Schlüssel behalten, während Sie angemeldet sind. Wenn aktiviert, kann der Gnome-Schlüsselbund sogar Ihr Anmeldekennwort verwenden. Oh, und ssh-copy-id kann Ihren öffentlichen Schlüssel auch auf Server kopieren.
Frank
2

Schreiben Sie ein kurzes Shell-Skript, das ssh-add ausführt und dann eine Verbindung wie folgt herstellt:

ssh-add ~/.ssh/your-key
ssh user@remotehost

Sie können dann mit einem Befehl in Ihren Host ssh.

hgolov
quelle
1

Laden Sie für AWS den PEM-Schlüssel herunter und führen Sie Folgendes aus:

ssh-add /path/to/pemfile.pem

Das hat bei mir funktioniert, Ubuntu 18.04. Quelle , nichts anderes wurde benötigt.

NB : Es ist jedoch wichtig, die Berechtigungen auf 400 zu setzen, bevor Sie dies tun.

chmod 400 /path/to/pemfile.pem

Wenn nicht, erhalten Sie eine Fehlermeldung:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @ WARNUNG
: NICHT GESCHÜTZTE PRIVATE SCHLÜSSELDATEI! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ Die Berechtigungen 0664 für '/home/toing_toing/blablabla.pem' sind zu offen. Es ist erforderlich, dass Ihre privaten Schlüsseldateien NICHT für andere zugänglich sind. Dieser private Schlüssel wird ignoriert.

toing_toing
quelle
0
 ssh serveruser@servername "cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys" 
Wangjianli
quelle
-2

Sprechen Sie über Amazon Cloud? Erstellen Sie in Ihrem ~ / .bashrc Umgebungsvariablen:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

quelle
Ja, ich spreche über die Cloud, aber dies ist das Schlüsselpaar für ssh in der Instanz, und die obigen Umgebungsvariablen sind erforderlich, um die API-Tools zu verwenden :)
theTuxRacer
Okay. Generieren Sie daher einen RSA-Schlüssel ohne Kennwort: 'ssh-keygen -t rsa' und verknüpfen Sie den generierten öffentlichen Schlüssel (~ / .ssh / id_dsa.pub) mit der Datei ~ / .ssh / authorized_keys des Remote-Servers. Ein Einzeiler, um dies zu erreichen, wurde von vielen gegeben.