GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ssh – Skript zur Automatisierung von SCP im Netzwerk?

Ich habe ein Netzwerk voller Linux-Rechner. In diesem Netzwerk habe ich einen Benutzer als user1 mit dem Passwort als Passwort in allen Maschinen.

Ich habe das folgende Skript, um Dateien im Home-Verzeichnis von user1 abzulegen in allen Maschinen des Netzwerks.

#!/usr/bin/expect -f

# connect via scp
spawn cat /home/user1/Desktop/IPlistfile.txt | while read line do
spawn scp /home/user1/Desktop/filetobesent.txt [email protected]${line}:/home/user1/Desktop
#######################
expect {
-re ".*es.*o.*" {
exp_send "yesr"
exp_continue
}
-re ".*sword.*" {
exp_send "passwordr"
}
}
interact
done

Das Problem ist, dass ich eine Fehlermeldung erhalte, „can't read line. No such variable “. Wenn ich jedoch anstelle der Zeilenvariablen direkt eine IP-Adresse verwende, kann ich die Datei übertragen.

Bearbeiten :Die IPlistfile.txt enthält die Liste der IP-Adressen in meinem Netzwerk. Jede Zeile enthält eine einzelne IP-Adresse.

Akzeptierte Antwort:

Ich kann mir ein paar Möglichkeiten vorstellen, dies zu tun, aber ich empfehle dringend, passwortloses ssh einzurichten Zugriff, du wirst mir später danken.

1. Richten Sie einen passwortlosen Zugriff auf Ihre Maschinen ein.

Dies ist bei weitem die beste Methode, da Sie sich bestimmt wieder mit den Maschinen verbinden möchten, und dies wird Ihnen das Leben erheblich erleichtern. Es ist auch viel sicherer als die anderen Optionen, selbst wenn Sie sich für eine leere Passphrase entscheiden, da Sie Passwörter nicht unverschlüsselt herumwerfen.

Erstellen Sie zuerst ein öffentliches ssh Schlüssel auf Ihrem Gerät:

ssh-keygen -t rsa

Sie werden nach einer Passphrase gefragt, die Sie zuerst eingeben müssen Mal, wenn Sie nach jeder Anmeldung einen beliebigen ssh-Befehl ausführen. Das bedeutet, dass für mehrere ssh oder scp Befehle müssen Sie nur einmal eingeben. Sie können es jedoch leer lassen, um einen vollständig passwortlosen Zugriff zu erhalten.

Nachdem Sie Ihren öffentlichen Schlüssel generiert haben, kopieren Sie ihn (als user1 ) an jeden Computer in Ihrem Netzwerk :

while read ip; do 
 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$ip 
done < IPlistfile.txt

Sie müssen das Passwort für jede IP manuell eingeben (es sei denn, Sie verwenden auch für diesen Schritt eine der folgenden Lösungen), aber sobald Sie dies getan haben, können Sie Dateien mit einem einfachen Befehl auf jeden dieser Computer kopieren:

while read ip; do
  scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Wenn Sie sshpass haben installiert ist, können Sie dies automatisieren, sodass Sie Ihr Passwort nicht für jeden Computer eingeben müssen:

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

2. Installieren Sie sshpass

Dies ist ein raffiniertes kleines Programm, mit dem Sie einen ssh übergeben können Passwort als Kommandozeilenparameter. Dies ist offensichtlich keine sehr sichere Lösung, und ich empfehle Ihnen dringend, den Abschnitt „Sicherheitsüberlegungen“ von man sshpass zu lesen .

Wie auch immer, es ist wahrscheinlich in den Repositories Ihrer Distribution verfügbar, auf Debian-basierten Systemen kann es mit installiert werden

sudo apt-get install sshpass

Ich kann es nicht überprüfen, da ich keinen RedHat-basierten Computer habe, aber soweit ich es hier durchsuchen kann, sollte es auf Fedora mit

installierbar sein
sudo yum install sshpass

Sobald Sie es installiert haben, können Sie es einfach ausführen

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Das -e Option teilt sshpass mit um das Passwort vom SSHPASS zu erhalten Variable. Dies ist etwas sicherer, als es als Parameter mit dem -p anzugeben Option.

Verwandte:SSH- und Home-Verzeichnisberechtigungen?

WICHTIG:

Dies schlägt stillschweigend fehl, wenn der Server, mit dem Sie sich verbinden, unbekannt ist und sein öffentlicher Schlüssel nicht auf Ihrem Computer gespeichert ist. Wenn dies nicht zu funktionieren scheint, verbinden Sie sich einfach einmal (ssh oder scp ) auf den Remote-Rechner und akzeptieren Sie dessen öffentlichen Schlüssel.

3. Verwenden Sie pscp stattdessen

pscp ist eine Alternative zu scp die das Passwort als Kommandozeilenparameter akzeptiert. Auf Debian-basierten Systemen kann dies mit installiert werden

sudo apt-get install putty-tools

Wie ich bereits sagte, kann ich es nicht überprüfen, aber es sollte mit

auf Fedora installierbar sein
sudo yum install putty

Anschließend können Sie Ihre Dateien mit

kopieren
while read ip; do
  pscp -pw password /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Linux
  1. Ssh – Shell-Skript zum Einloggen in einen SSH-Server?

  2. Ssh – Beschränken eines Ssh/scp/sftp-Benutzers auf ein Verzeichnis?

  3. Ssh – Passwörter an ein Skript übergeben?

  4. Ssh – SCP über mehrere Hosts?

  5. Wie man über eine Zwischenmaschine scp??

Automatisieren Sie die Bildverarbeitung mit diesem Bash-Skript

Wie funktioniert SSH?

Installieren und verwenden Sie WinSCP

user-data (cloud-init)-Skript wird auf EC2 nicht ausgeführt

Wie scp über eine Zwischenmaschine?

Mehrere scp-Threads gleichzeitig ausführen