führe cat über SSH aus, sende Text oder Datei über SSH

führe cat über SSH aus, sende Text oder Datei über SSH

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 SERVERmit 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 sshpassin 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 -fdas 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

verwandte Informationen