Como definir a saída ssh dinâmica para a variável zsh?

0

Eu gostaria de definir uma variável para a saída de um comando ssh no zsh. O comando ssh se conecta a um primeiro servidor, depois a ssh novamente deste servidor para um segundo servidor onde eu quero executar meu comando.

Aqui está o comando (funciona bem quando digitado no shell):

ssh -t host1 "ssh -t host2 "uname -a""

Eu tenho uma configuração de chave ssh para host1, então a conexão não pede uma senha. Eu não tenho um para a conexão subsequente entre host1 e host2, então eu tenho que digitar a senha.

Agora, gostaria de salvar o conteúdo de uname em uma variável, a ser usada no meu script zsh. Eu ingenuamente tentei:

a=$(ssh -t host1 "ssh -t host2 "uname -a"")

mas parece ficar pendente para sempre, de alguma forma, o prompt interativo de login de senha não é redirecionado para mim. Se eu tentar um echo $a , recebo um user@host2's password:' para confirmar

Meu palpite é que algo deu errado na maneira como o zsh lida com aspas e aspas duplas, mas eu não conseguia descobrir o quê. Eu tentei muitas variações, sem sucesso.

    
por pixelastic 14.08.2011 / 14:09

1 resposta

0

Definitivamente não está relacionado a citar (o que deve provavelmente ser ssh -t host1 "ssh -t host2 \"uname -a\"" ). As cotas aplicam-se apenas aos argumentos da linha de comando, não ao comando input / output. Apenas $() pode afetar a saída.

O problema pode ser simplesmente como ssh manipula a entrada / saída tty. Parece que ssh (aqui ssh -t host1 ) não usa o dispositivo terminal do lado do cliente, mesmo que tenha um disponível - ele grava em stdout, que $() capturará.

A melhor solução seria configurar a autenticação de chaves entre local e host2 , depois adicionar as chaves ao ssh-agent e usar a opção "Encaminhamento de agentes": %código%. Dessa forma, você não precisa copiar sua chave privada em nenhum outro lugar.

    
por 14.08.2011 / 17:45

Tags