Obtém o endereço IP do servidor linux remoto 'usando o script bash via ssh

1

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

mas quando eu corro:

spawn ssh -t $ usuário @ $ remote_host "/ sbin / ifconfig eth1 | grep 'inet addr:' | grep -v '127.0.0.1' | corte -d: -f2 | awk '{print $ 2}'; echo $ ip " diz que não pode ler "1": nenhuma variável     enquanto executa "spawn ssh -t $ usuário @ $ 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

    
por user2072910 15.04.2013 / 20:31

1 resposta

4

Por que não usar ip ao invés do ifconfig , e pular todos os greps e cortes extras, já que o awk pode fazer isso.

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

Em qualquer caso, a maior parte do seu problema em seus comandos de exemplo tem a ver com o tipo de aspas que você escolhe e como o bash as avalia.

Se você fizer algo como cfrancy@ws:~$ ssh root@srv01 echo "Hello $USER" , a saída que verá será Hello cfrancy e não Hello root , como esperado. Como você usou aspas duplas " em torno do seu comando para o sistema remoto, todas as variáveis são avaliadas antes de o comando ser enviado. O comando cfrancy@ws:~$ ssh root@srv01 echo 'Hello $USER' retornará Hello root , pois o $USER é avaliado no site remoto. É claro que você também precisa mudar ou escapar de suas outras citações dentro de seu 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ê quer. embora eu ache que minha solução que usa apenas ip e awk seja a melhor escolha, 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}"'
    
por 16.04.2013 / 01:17

Tags