Beziehen Sie die IP-Adresse des Remote-Linux-Servers mithilfe eines Bash-Skripts über SSH

Beziehen Sie die IP-Adresse des Remote-Linux-Servers mithilfe eines Bash-Skripts über SSH

Ich muss die IP-Adresse meines Remote-Linux-Servers eth1 mithilfe eines Bash-Skripts über SSH abrufen und habe folgenden Befehl: /sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'

aber wenn ich laufe:

spawn ssh -t $user@$remote_host "/sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $2}' ; echo $ip " es heißt, kann "1" nicht lesen: keine solche Variable während der Ausführung von "spawn ssh -t $user@$remote_host "ip= /sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'; echo $ip "" (Datei "./ssh2.sh" Zeile 11)

Könnten Sie mir also bitte bei diesem Problem helfen? Danke

Antwort1

Warum verwenden Sie nicht ipanstelle des veralteten ifconfigund überspringen alle zusätzlichen Greps und Cuts, da awk dies kann.

Ein Befehl wieip addr show dev eth0 | awk '/^ +inet / {split($2,a,"/"); print a[1]}'

In jedem Fall haben die meisten Ihrer Probleme in Ihren Beispielbefehlen mit der Art der von Ihnen gewählten Anführungszeichen und der Art und Weise zu tun, wie Bash diese auswertet.

Wenn Sie so etwas tun, cfrancy@ws:~$ ssh root@srv01 echo "Hello $USER"sehen Sie die Ausgabe Hello cfrancyund nicht Hello rootdie, die Sie vielleicht erwarten. Da Sie "Ihren Befehl für das Remote-System in Anführungszeichen gesetzt haben, werden alle Variablen ausgewertetVorder Befehl wird gesendet. Der Befehl cfrancy@ws:~$ ssh root@srv01 echo 'Hello $USER'wird zurückgegeben Hello root, da er $USERauf der Remote-Site ausgewertet wird. Natürlich müssen Sie auch Ihre anderen Anführungszeichen in Ihrem zusammengesetzten Befehl umstellen oder maskieren, damit alles richtig funktioniert.

Wenn Sie das Anführungszeichenverhalten berücksichtigen, führt der Befehl wahrscheinlich das gewünschte Ergebnis aus. Ich denke jedoch, dass meine Lösung, die nur verwendet ip, und awkdie bessere Wahl ist, da ich nur 2 statt 4 Programme verwende.

ssh -t $user@$remote_host '/sbin/ifconfig eth0 | grep "inet addr:"| grep -v "127.0.0.1" | cut -d: -f2 | awk "{ print $1}"'

verwandte Informationen