Multihop com sshpass

2

Eu quero usar .ssh/config para se conectar a um host por meio de um gateway. Eu não quero configurar uma chave RSA e ter que usar a senha. Eu 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 eu já configurei a chave auth no gateway e os detalhes estão presentes no 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 , obtenho Pseudo-terminal will not be allocated as stdin is not a terminal . Eu tentei -vtt com o ssh para obter mensagens estranhas, mas nenhum terminal. Eu sei que uma cadeia de ProxyCommand funciona quando há um netcat/nc ou apenas ssh -W com ele. Mas aqui não está funcionando. Mesmo quando eu tento o último comando sem sshpass, recebo o mesmo erro. Eu estou supondo que tem a ver com certas expectativas que ProxyCommand tem com o comando que segue e eu não sou capaz de cumpri-las.

Alguma idéia?

    
por cauthon14 22.09.2016 / 10:48

1 resposta

2

Eu não acho que sua configuração seja a mesma do one-liner, parece mais com isso:

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

i.e. você tem o sshpass em execução dentro de um ProxyCommand.

Mas não acho que isso funcione, sshpass encapsula o cliente ssh em um pseudo-terminal, ocultando o fato de que a senha realmente vem de um arquivo ou algo diferente da entrada do usuário de um terminal. Para fazer isso, ele precisa ser executado antes da execução do ssh client.

Se o seu primeiro one-liner funcionar, mas você simplesmente não sentir vontade de digitar o sshpass de cada vez, você pode envolvê-lo em um shell script:

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

Em seguida, execute algo como sshscript myusername@myip .

Como um aparte, não use sshpass -p , ele tornará a senha visível em ps output enquanto o ssh client (e sshpass ) for executado. É melhor usar sshpass -e para passar o pw pelo ambiente ou sshpass -f file para lê-lo de um arquivo.

    
por 22.09.2016 / 11:15