Obtenha o endereço IP do servidor Linux remoto usando script bash via ssh

Obtenha o endereço IP do servidor Linux remoto usando script bash via ssh

Preciso obter o endereço IP eth1 do meu servidor Linux remoto usando o script bash por meio do ssh e tenho o seguinte comando: /sbin/ifconfig eth1 | grep 'endereço inet:'| grep -v '127.0.0.1' | cortar -d: -f2 | awk '{imprimir $1}'

mas quando eu corro:

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 " diz que não é possível ler "1": nenhuma variável durante a execução de "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 "" (arquivo "./ssh2.sh" linha 11)

Então, por favor, poderia me ajudar com esse problema. Obrigado

Responder1

Por que não usar ipem vez do obsoleto ifconfige pular todos os greps e cortes extras, já que o awk pode fazer isso.

Então um comando comoip addr show dev eth0 | awk '/^ +inet / {split($2,a,"/"); print a[1]}'

De qualquer forma, a maior parte do seu problema nos comandos de exemplo tem a ver com o tipo de aspas que você escolhe e como o bash as avalia.

Se você fizer algo assim cfrancy@ws:~$ ssh root@srv01 echo "Hello $USER", a saída que verá será Hello cfrancy, e não Hello rootcomo você poderia esperar. Como você usou aspas duplas "em seu comando para o sistema remoto, todas as variáveis ​​são avaliadasanteso comando é enviado. O comando cfrancy@ws:~$ ssh root@srv01 echo 'Hello $USER'retornará Hello rootdesde que $USERseja avaliado no site remoto. É claro que você também precisa alternar ou escapar de suas outras aspas dentro do comando composto para que as coisas funcionem corretamente.

De qualquer forma, mantendo o comportamento de cotação em mente, o comando provavelmente faria o que você deseja. embora eu ache que minha solução usa apenas ip, e awké uma escolha melhor, já que estou usando apenas 2 programas em vez de 4.

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

informação relacionada