Script da função SSH recebendo o erro 'Conexão recusada'

1

Estou usando a função de atalho fish as shell, ssh da seguinte forma:

function sshec2
  ssh -i $HOME/.ssh/key.pem -t -t "ubuntu@$argv[1]"
end

Para ssh em uma instância específica do AWS EC2, escrevi o fluxo do pipe de comando:

ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
grep 'INSTANCE' |
grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|
head -1 |
sshec2

No entanto, recebi um erro ssh: connect to host port 22: Connection refused , enquanto a função sshec2 funciona quando executo sshec2 <ec2_public_ip> .

Alguma parte idiota que eu estou sentindo falta?

    
por dearrrfish 01.03.2016 / 20:41

1 resposta

1

Se eu entendi corretamente, você tem um pipeline que gera uma lista de nomes de host ( ec2-describe-instances … | grep … | grep … ), você pega a primeira linha ( head -1 ) e deseja usá-lo como o nome do host ao qual se conectar. Você está passando o nome do host na entrada padrão da função sshec2 e chamando a função sem nenhum argumento. Portanto, quando a função é executada, $argv[1] está vazio e você acaba executando ssh com os argumentos -i , /home/dearrrfish/.ssh/key.pem , -t , -t , ubuntu@ . Se você tiver terminado com uma linha de comando ssh válida e a conexão tiver passado, a saída do … | head -1 pipeline será canalizada para o programa que ssh executa.

Você precisa passar o nome do host como o primeiro argumento para a função. A ferramenta para isso é substituição de comandos .

sshec2 (ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
        grep 'INSTANCE' |
        grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |
        head -1)
    
por 02.03.2016 / 02:26