Folgendes habe ich versucht und es ist ein Fehler aufgetreten:
$ cat /home/tim/.ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Folgendes habe ich versucht und es ist ein Fehler aufgetreten:
$ cat /home/tim/.ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Antworten:
OpenSSH wird mit einem Befehl dazu geliefert
ssh-copy-id
. Sie geben ihm einfach die Remote-Adresse und er fügt Ihren öffentlichen Schlüssel zurauthorized_keys
Datei auf dem Remote-Computer hinzu:Möglicherweise müssen Sie das
-i
Flag verwenden, um Ihren öffentlichen Schlüssel auf Ihrem lokalen Computer zu suchen:quelle
>>
wird von Ihrer Shell verarbeitet, und Sie führen den Befehl über SSH statt über eine Shell aus. Sein Fix, dass SSH eine Shell ausführt, die dann Ihren Befehlssh-copy-id
funktioniert die Verwendung nicht, oder?Sie könnten immer so etwas tun:
Ich bin nicht sicher, ob Sie
cat
von einem lokalen Computer in eine SSH-Sitzung können. Verschieben Sie es einfach wie vorgeschlagen nach / tmp.Edit: Genau das
ssh-copy-id
macht. Genau wie Michael gesagt hat.quelle
cat
oder auf andere Weise). Was Sie beschreiben, ist der altmodische Weg;ssh-copy-id
wird empfohlen, da das Risiko von Tippfehlern oder falschen Berechtigungen für Dateien geringer ist.cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
.Diese Antwort beschreibt, wie der in der Frage angegebene beabsichtigte Weg funktioniert.
Sie können auf dem Remotecomputer eine Shell ausführen, um die spezielle Bedeutung des
>>
Umleitungsoperators zu interpretieren :Der Umleitungsoperator
>>
wird normalerweise von einer Shell interpretiert.Wenn Sie ausführen,
ssh host 'command >> file'
kann nicht garantiert werden, dasscommand >> file
dies von einer Shell interpretiert wird. In Ihrem Fallcommand >> file
wird anstelle der Shell ohne spezielle Interpretation ausgeführt und>>
der Befehl als Argument übergeben - genauso wiecommand '>>' file
in einer Shell ausgeführt.Einige Versionen von SSH (OpenSSH_5.9) rufen automatisch die Shell auf dem Remote-Server auf und übergeben die Befehle an sie, wenn sie Token erkennen, die von einer Shell wie z
;
>
>>
. B. interpretiert werden sollen .quelle
openssh
bietetssh-copy-id
. Die Reihenfolge wäre:Generieren Sie einen anständigen 4k-Schlüssel
Starten Sie Ihren SSH-Agenten und saugen Sie Informationen wie
SSH_AGENT_PID
usw. ein.Laden Sie nun die Schlüssel in Ihren SSH-Agenten
Überprüfen Sie, ob es geladen ist
Dies zeigt Ihnen, was Sie im ssh-agent haben
Nun eigentlich SSH zu einem entfernten System
Jetzt können Sie ssh-copy-id ohne Argumente ausführen:
Dadurch werden
~/.ssh/authorized_keys
die grundlegenden Informationen erstellt und ausgefüllt, die von ssh-agent benötigt werden.quelle
Ich hatte Probleme mit der ssh-copy-id, als ich einen anderen Port als 22 gewählt habe. Hier ist mein Oneliner mit einem anderen ssh-Port (zB 7572):
quelle
In der Tat macht der
the ssh-copy-id
Befehl genau das (aus demopenssh-client
Paket):Hinweis:
host
Bedeutet IP-Adresse oder Domain .Ich möchte auch etwas hinzufügen weitere Informationen zu dieser
1) Wir können einen anderen Port für SSH auf dem Zielserver angeben :
Hinweis:
Der Port muss sich vor dem befinden, sonst
user@host
wird er nicht aufgelöst.Quelle
2) Wir können eine Datei mit einem öffentlichen Schlüssel angeben :
Hinweis:
Mit dieser
-i
Option können wir den entsprechenden Speicherort des Namens in der Datei angeben, die den öffentlichen Schlüssel enthält.Manchmal kann es nützlich sein, besonders wenn wir es an einem nicht standardmäßigen Ort aufbewahren oder wenn wir mehr als einen öffentlichen Schlüssel auf unserem Computer haben und auf einen bestimmten verweisen möchten.
quelle