
Quero usar .ssh/config
para 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 -vtt
com ssh receber mensagens estranhas, mas sem terminal. Eu sei que uma cadeia de ProxyCommand funciona quando existe um netcat/nc
ou apenas ssh -W
com 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á sshpass
executando dentro de um ProxyCommand.
Mas não acho que isso funcione, sshpass
envolve o ssh
cliente 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 ssh
cliente ser executado.
Se sua primeira linha funcionar, mas você simplesmente não quiser digitá-la todas sshpass
as 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 ps
saída enquanto o ssh
cliente (e sshpass
) estiver em execução. Melhor usar sshpass -e
para passar o pw pelo ambiente ou sshpass -f file
para lê-lo de um arquivo.