Der einfachste Weg, um SSH-Schlüssel auf einen anderen Computer zu kopieren?

342

Ich bin zu Hause faul und verwende die Kennwortauthentifizierung für meine Heimcomputer. Ich bin bereit, zur schlüsselbasierten Authentifizierung überzugehen. Es gibt viele Möglichkeiten im Internet, wie dies zu tun ist, einschließlich des Kattierens, des Überschreibens des Schlüssels, des direkten Überschreibens des Schlüssels usw.

Ich suche nach der einfachsten und empfohlenen Möglichkeit, einen Schlüssel zu kopieren. Gibt es hoffentlich irgendwo im Ubuntu-ssh-Paket einen Convenience-Wrapper?

Ich bin mir bereits darüber im Klaren, wie man Passwortanmeldungen deaktiviert .

Jorge Castro
quelle

Antworten:

463

Der ssh-copy-idBefehl (im openssh-client- Paket und standardmäßig installiert) macht genau das:

ssh-copy-id [email protected]

kopiert den öffentlichen Schlüssel Ihrer Standardidentität ( -i identity_filefür andere Identitäten verwenden) auf den Remote-Host.

Die Standardidentität ist Ihr "Standard" -SH-Schlüssel. Es besteht aus zwei Dateien (Öffentliche und private Schlüssel) in Ihrem ~/.sshVerzeichnis, in der Regel genannt identity, id_rsa, id_dsa, id_ecdsaoder id_ed25519(und das gleiches mit .pub), abhängig von der Art des Schlüssels. Wenn Sie nicht mehr als einen SSH-Schlüssel erstellt haben, müssen Sie sich nicht um die Angabe der Identität kümmern. SSH-Copy-ID wählt diese einfach automatisch aus.

Falls Sie keine Identität haben, können Sie mit dem Tool eine generieren ssh-keygen.

Wenn der Server einen anderen als den Standardport ( 22) verwendet, sollten Sie die folgenden Anführungszeichen verwenden ( Quelle ):

ssh-copy-id "[email protected] -p <port-number>"
Marcel Stimberg
quelle
1
Was ist die Standardidentität?
Oxwivi
17
Für andere Ports verwenden Sie:ssh-copy-id "user@host -p 6842"
jibon57
5
Was ist, wenn der Remote-Server, auf den Sie kopieren, keine Passwortabfragen zulässt und im Grunde genommen für den SSH-Zugriff gesperrt ist?
Cyle
10
Auf einem Mac können Sie brew install ssh-copy-idden Befehl ausführen.
Avishai
1
@MarcelStimberg Bitte aktualisieren Sie die Antwort, um das -i-Profil einzuschließen. Leute haben wahrscheinlich mehr als 1 Schlüssel und drücken sie alle, oder müssen für die Option -i in Kommentaren jagen
Nick
129

Ich mag die Antwort von Marcel. Ich kannte diesen Befehl nicht. Ich habe immer das verwendet, was ich auf der Oracle-Website gefunden hatte :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Ich dachte, es hier noch zu posten, weil es ein gutes Beispiel dafür ist, was mit Shell-Code mit der Kraft von erreicht werden kann ssh. Aber mit dem ssh-copy-idist es definitiv sicherer, es richtig zu machen!

Beachten Sie, dass .sshder obige Befehl fehlschlägt , wenn der Ordner noch nicht vorhanden ist. Darüber hinaus ist es möglicherweise besser, beim Erstellen der Datei eine möglichst geringe Berechtigung festzulegen (im Grunde nur Lese- und Schreibzugriff für Besitzer). Hier ist ein erweiterter Befehl:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Huygens
quelle
2
Genau diese Befehle funktionieren auch von einem Mac aus
Mihai P.
Es sollte unter jedem Unix mit der meisten Shell funktionieren. Ich habe den Beitrag mit einem aktualisierten Befehl aktualisiert, falls der Ordner .sshauf der Remote-Seite nicht vorhanden ist.
Huygens
1
Das catist nicht nötig - eine normale < ~/.ssh/id_rsa.pub | ssh ...
Eingabeumleitung
@ Huygens Danke. Nützlicher, wenn Sie sich dieses merken, da Sie nichts installieren müssen und es auch zum Ausführen von Fremdbefehlen geeignet sein kann, z. B. zum Ändern der serverseitigen Berechtigungen, wie Sie in Ihrem erweiterten Beispiel demonstriert haben.
Jonathan Komar
2
Ich bevorzuge diesen Weg sehr, da Sie damit ausführliches ssh verwenden können, was hilfreich ist, um herauszufinden, warum Dinge kaputt sind. sshcopyid erstarrte und arbeitete nie, das ging perfekt.
Sirenen
31

Grafische Methode

  1. Öffnen Sie AnwendungenPasswörter und SchlüsselMeine persönlichen Schlüssel .
  2. Wählen Sie Ihren Schlüssel aus und klicken Sie dann auf RemoteSchlüssel für Secure Shell konfigurieren .

Computer für SSH-Verbindung einrichten

ændrük
quelle
Ich habe keine "Passwörter und Verschlüsselungsschlüssel" in meinem Menü.
Jorge Castro
Welche Ubuntu-Version verwenden Sie? In Ubuntu 10.04 LTS sollte dies standardmäßig verfügbar sein.
ændrük,
10.10, hat gerade das Tag hinzugefügt. Die Antwort von Marcel ist das, wonach ich suche, obwohl +1 für Ihre desktoporientierte Antwort!
Jorge Castro
4
Dieses Programm ist seahorse.
Gilles
1
Ich denke, diese Anwendung ist im Menü System-> Einstellungen in 10.10 (kann es jetzt nicht überprüfen, ich bin am 10.04)
Huygens
18

Unter Ubuntu können Sie Ihre Schlüssel vom Launchpad abrufen:

ssh-import-id [launchpad account name]

Details :

  1. Sie benötigen ein Launchpad-Konto, also melden Sie sich an oder erstellen Sie ein Konto
  2. Klicken Sie nach dem Anmelden auf die Schaltfläche neben SSH-Schlüsseln:
  3. Fügen Sie den Inhalt Ihrer öffentlichen Schlüsseldatei (einschließlich Kommentar) in dieses Feld ein. Ein solcher Schlüssel sieht so aus:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    Hier wird ssh-rsaangegeben, dass der Schlüssel ein RSA-Schlüssel AAAAB3Nza .... UyDOFDqJpist, der tatsächliche Schlüssel und lekensteynder Kommentar.

  4. Speichern Sie den Schlüssel, indem Sie auf Öffentlichen Schlüssel importieren klicken
  5. Wenn alles geklappt hat, sollte Ihr Schlüssel jetzt unter SSH-Schlüssel aufgeführt sein:

Das Paket ssh-import-idmuss auf dem Computer installiert sein, auf den von einem entfernten Standort aus zugegriffen werden muss. Dieses Paket wird zusammen mit dem openssh-serverPaket installiert , da es ein empfohlenes Paket für ist openssh-server. Nachdem Sie sichergestellt haben, dass ssh-import-idauf dem Clientcomputer Folgendes installiert wurde, führen Sie Folgendes aus:

ssh-import-id [launchpad account name]

Dadurch wird der öffentliche Schlüssel über HTTPS von den Launchpad-Servern heruntergeladen, wodurch Sie vor MITM-Angriffen geschützt werden.

Unter Ubuntu Lucid und früher können Sie dasselbe erreichen mit:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

Der echoBefehl wird benötigt, um nach der Zeile mit dem SSH-Schlüssel einen zusätzlichen Zeilenumbruch zu erhalten.

Lekensteyn
quelle
14

für kundenspezifischen Hafen

ssh-copy-id -i "[email protected] -p2222"

-i wechselt standardmäßig zu ~ / .ssh / id_rsa.pub. Wenn Sie einen anderen Schlüssel möchten, setzen Sie den Pfad des Schlüssels nach -i

WARNUNG: Wenn Sie das -i nicht geschrieben haben, werden alle in ~ / .ssh enthaltenen Schlüssel kopiert

Omar S.
quelle
1
Sind Sie sich da sicher? "-i identitätsdatei - Verwenden Sie nur die in identitätsdatei enthaltenen Schlüssel (anstatt über ssh-add (1) oder in der default_ID_datei nach Identitäten zu suchen). Wenn der Dateiname nicht mit .pub endet, wird dies hinzugefügt. Wenn der Dateiname wird weggelassen, wird die default_ID_file verwendet. "
Yousha Aleayoub
0

ssh-copy-idmacht genau das. Ich bin nicht sicher, warum einige der anderen Antworten hier ungenaue Informationen hinzufügen. Die Hilfe zeigt Folgendes:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

Ich habe gerade Folgendes auf einem Ubuntu 18.04-Client mit einem CentOS 7.6-Server versucht und es hat wie ein Zauber funktioniert. Das Beispiel zeigt die Verwendung eines benutzerdefinierten Ports von 2222und die Angabe eines öffentlichen Schlüssels unter~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 [email protected]

Bevor ich den Befehl ausgeführt habe, habe ich den -nSchalter am Ende verwendet, um einen Probelauf durchzuführen, der bestätigte, dass der Befehl wie beabsichtigt funktioniert. Nachdem ich es bestätigt hatte, führte ich den Befehl wie oben beschrieben ohne den -nSchalter erneut aus.

Isapir
quelle