
Ich habe 100 Server und muss mich mithilfe des folgenden Skripts per SSH vom zentralen Server aus bei ihnen anmelden: Ich habe es wie folgt versucht: Damit sollte die Version in die Datei umgeleitet werden, die auf dem zentralen Server gespeichert wird.
#!/bin/bash
CMD='java -version'
while read line
do
ssh -n user@"$line" $CMD >> /pathforoutputfile/outputjava.txt
done < /pathforhosts/hosts.txt
Ich erhalte jedoch keine in der Datei generierte Ausgabe/pathforoutputfile/outputjava.txt
Antwort1
Dieser Befehl schreibt tatsächlich in stderr.
ron@haggis:~$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.04.3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.04.3, mixed mode, sharing)
ron@haggis:~$
ron@haggis:~$ java -version 2> foo.txt
ron@haggis:~$ cat foo.txt
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.04.3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.04.3, mixed mode, sharing)
Daher sollten Sie die Weiterleitung mit 2>>
statt >>
mit durchführen.
ssh -n sgarole@"$line" $CMD >> /pathforoutputfile/outputjava.txt
Eine weitere Sache, die mir aufgefallen ist, ist, dass Sie die Remote-Hostnamen in nicht zu erwähnen scheinen /pathforoutputfile/outputjava.txt
.