SSH: variável remota

0

Eu quero rodar um script complexo via ssh

#!/bin/sh

ARRAY1=(
server1s
server123
server12
server14
server13
)


for i in ${ARRAY1[@]};do ssh  $i "
    case \$HOSTNAME in 

server1.domain.com)
echo try1
  ;;
server12.domain.com)
echo try12
  ;;
*)
echo try123
  ;;
esac

O problema é ssh ler minha variável interna de nome de host e retornar try123, é possível ler a variável interna de site remoto? Eu tentei \ $ VARIABLE e $ VARIABLE mas o resultado é o mesmo

    
por elbarna 21.05.2015 / 21:31

1 resposta

1

Usar \$HOSTNAME é a maneira correta de escapar da variável nesse caso.

No entanto, essa variável geralmente contém o nome do host (não-fqdn) ou pode não ser preenchida. Você deve preferir usar o comando hostname -f para obter o FQDN do seu servidor.

Eu não sei como será o seu script final, mas conectando-se a server1 e, em seguida, verifique se esse servidor é server1 pode ser algum tipo de inútil (fora do propósito de segurança).

Você pode escrever alguns scripts, por exemplo script1.sh contendo

echo "$HOSTNAME / $(hostname -f)"

então

for i in ${ARRAY1[@]};do
    case $i in
      server1) ssh $i < script1.sh
      ;;
      server2) ssh $i < script2.sh
      ;;
      *) ssh $i < script_${i}.sh
    esac
 done 

EDITAR: Conforme declarado nos comentários, a versão enviada do OpenBSD da opção hostname não entende -f . O comportamento padrão é exibir o FQDN.

    
por 21.05.2015 / 21:54