Grüße Ich erstelle ein Skript, um das Senden von öffentlichen Schlüsseln zu automatisieren, aber ich kann meine Datei oder Variable weder per "Echo" noch per "Cat" über SSH senden.
Antwort1
Wenn Sie eine Datei an einen Remote-Server senden möchten, können Sie verwenden scp
.
Von man scp:
scp kopiert Dateien zwischen Hosts in einem Netzwerk. Es verwendet ssh(1) für die Datenübertragung und bietet dieselbe Authentifizierung und Sicherheit wie ssh(1). Anders als rcp(1) fragt scp nach Passwörtern oder Passphrasen, wenn diese für die Authentifizierung benötigt werden.
Grundlegende Verwendung:
scp user@origin:/path/to/file user@target:/path/to/file
Angenommen, Sie möchten example.txt aus dem aktuellen Verzeichnis auf ein Remote-Verzeichnis SERVER
mit demselben Namen in einem Ordner namens example übertragen und sich dabei als Root authentifizieren:
scp example.txt root@SERVER:/example/example.txt
Antwort2
Für die Übertragung öffentlicher Schlüssel auf Remote-Server gibt es ein spezielles DienstprogrammSSH-Kopie-ID.
Oben finden Sie ein Skript, mit dem Sie diese Aufgabe automatisieren können:
#!/bin/sh
while read server ; do
timeout 10 ssh-copy-id -i <public_key_path> <user>@$server
done < <list_of_servers.txt>
PS: Ersetzen Sie die Konstanten zwischen <> durch Ihre eigenen Werte.
Antwort3
Sie können sshpass
in Ihrem Skript Folgendes verwenden, um auf den Server zuzugreifen, ohne jedes Mal das Kennwort eingeben zu müssen:
sshpass -p 'PASSWORD' ssh USER@SERVER ssh-copy-id USER@SERVER
Sie können -f
das Passwort auch in eine Datei schreiben, wenn Sie es nicht in der Befehlszeile schreiben möchten (in beiden Fällen ist es im Klartext), für eine Liste von Servern namens servers.list
for SERVER in $(cat servers.list)
do
sshpass -p 'PASSWORD' ssh USER@$SERVER ssh-copy-id USER@$SERVER
done