Получить IP-адрес удаленного сервера Linux с помощью скрипта bash через ssh

Получить IP-адрес удаленного сервера Linux с помощью скрипта bash через ssh

Мне нужно получить IP-адрес eth1 моего удаленного сервера Linux с помощью скрипта bash через ssh, и у меня есть следующая команда: /sbin/ifconfig eth1 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'

но когда я бегу:

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 " он говорит, что не может прочитать "1": такой переменной нет при выполнении "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 "" (файл "./ssh2.sh" строка 11)

Так что не могли бы вы мне помочь с этой проблемой? Спасибо

решение1

Почему бы не использовать ipвместо устаревшего ifconfigи не пропустить все дополнительные grep и cut, поскольку awk может это сделать.

Итак, команда вродеip addr show dev eth0 | awk '/^ +inet / {split($2,a,"/"); print a[1]}'

В любом случае, большая часть проблем в ваших примерах команд связана с типом выбранных вами кавычек и с тем, как bash их оценивает.

Если вы сделаете что-то вроде cfrancy@ws:~$ ssh root@srv01 echo "Hello $USER"этого, то вывод, который вы увидите, будет Hello cfrancy, а не Hello rootтаким, как вы могли бы ожидать. Поскольку вы использовали двойные кавычки "вокруг вашей команды для удаленной системы, все переменные оцениваютсядокоманда отправлена. Команда cfrancy@ws:~$ ssh root@srv01 echo 'Hello $USER'вернется, Hello rootтак как $USERоценивается на удаленном сайте. Конечно, вам также нужно переключиться или экранировать другие кавычки внутри вашей составной команды, чтобы все работало правильно.

В любом случае, учитывая поведение кавычек, команда, вероятно, сделает то, что вам нужно. Хотя я думаю, что мое решение, использующее только ip, awkявляется лучшим выбором, поскольку я использую только 2 программы вместо 4.

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

Связанный контент