Multihop com sshpass

Multihop com sshpass

Quero usar .ssh/configpara me conectar a um host através de um gateway. Não quero configurar uma chave RSA e preciso usar uma senha. Já fiz esse tipo de salto sem senha. Agora tentando fazer isso com senha.

Um comando direto que funciona para mim é:

sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" myusername@myip

Onde já configurei a autenticação de chave no gateway e seus detalhes estão presentes em meu .ssh/config. Para configurar isso em .ssh/config, tentei o seguinte:

Host h_act
      <username, hostname, port etc.>
      ProxyCommand ssh gateway -W %h:%p
Host h
      ProxyCommand sshpass -p mypassword ssh h_act

No entanto, quando tento ssh h, consigo Pseudo-terminal will not be allocated as stdin is not a terminal. Tentei -vttcom ssh receber mensagens estranhas, mas sem terminal. Eu sei que uma cadeia de ProxyCommand funciona quando existe um netcat/ncou apenas ssh -Wcom ele. Mas aqui não está funcionando. Mesmo quando tento o último comando sem sshpass, recebo o mesmo erro. Suponho que tenha a ver com certas expectativas que o ProxyCommand tem com o comando a seguir e não consigo cumpri-las.

Alguma ideia?

Responder1

Não acho que sua configuração seja igual àquela de uma linha, é mais parecida com isto:

ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip 

ou seja, você está sshpassexecutando dentro de um ProxyCommand.

Mas não acho que isso funcione, sshpassenvolve o sshcliente em um pseudoterminal, escondendo o fato de que a senha realmente vem de um arquivo ou algo diferente da entrada do usuário em um terminal. Para fazer isso, ele precisa ser executado antes do sshcliente ser executado.

Se sua primeira linha funcionar, mas você simplesmente não quiser digitá-la todas sshpassas vezes, poderá envolvê-la em um script de shell:

#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"

Em seguida, execute algo como sshscript myusername@myip.

Além disso, não use sshpass -p, isso tornará a senha visível na pssaída enquanto o sshcliente (e sshpass) estiver em execução. Melhor usar sshpass -epara passar o pw pelo ambiente ou sshpass -f filepara lê-lo de um arquivo.

informação relacionada