
Quiero usarlo .ssh/config
para conectarme a un host a través de una puerta de enlace. No quiero configurar una clave RSA y tener que usar una contraseña. Anteriormente hice este tipo de salto sin contraseña. Ahora intento hacerlo con contraseña.
Un comando directo que me funciona es:
sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" myusername@myip
Donde ya configuré la autenticación de clave en la puerta de enlace y sus detalles están presentes en mi .ssh/config. Para configurar esto en .ssh/config
, intenté lo siguiente:
Host h_act
<username, hostname, port etc.>
ProxyCommand ssh gateway -W %h:%p
Host h
ProxyCommand sshpass -p mypassword ssh h_act
Sin embargo, cuando lo intento ssh h
, lo consigo Pseudo-terminal will not be allocated as stdin is not a terminal
. Intenté -vtt
con ssh recibir mensajes extraños, pero no había terminal. Sé que una cadena de ProxyCommand funciona cuando hay una netcat/nc
o simplemente ssh -W
con ella. Pero aquí no funciona. Incluso cuando intento el último comando sin sshpass, aparece el mismo error. Supongo que tiene que ver con ciertas expectativas que ProxyCommand tiene con el comando que sigue y no soy capaz de cumplirlas.
¿Algunas ideas?
Respuesta1
No creo que su configuración sea la misma que esa frase, se parece más a esto:
ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip
es decir, tienes la sshpass
ejecución dentro de un ProxyCommand.
Pero no creo que eso funcione, sshpass
envuelve al ssh
cliente en un pseudo-terminal, ocultando el hecho de que la contraseña en realidad proviene de un archivo o algo más que la entrada del usuario desde un terminal. Para hacer esto, debe ejecutarse antes de que ssh
se ejecute el cliente.
Si su primera frase funciona, pero no tiene ganas de escribirla sshpass
cada vez, puede envolverla en un script de shell:
#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"
Luego ejecuta con algo como sshscript myusername@myip
.
Además, no use sshpass -p
, hará que la contraseña sea visible en ps
la salida mientras el ssh
cliente (y sshpass
) se ejecute. Mejor uso sshpass -e
para pasar el pw por el entorno, o sshpass -f file
para leerlo desde un archivo.