Tengo una instancia EC2 con una IP dinámica y me gustaría conectarme a ella directamente sin tener que modificarla .ssh/config
cada vez que cambia.
Puedo consultar la ip con
aws ec2 describe-instances --filters 'Name=tag:Name,Values=MYTAG' --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicIp' --output text
Ahora, quiero agregar este comando a la ProxyCommand
sección de mi .ssh/config
archivo, pero recibo algunos errores.
Esta es la sección para ese anfitrión.
Host ec2-instance
User ubuntu
IdentityFile my/pem/file.pem
ProxyCommand bash -c "host=$(aws ec2 describe-instances --filters 'Name=tag:Name,Values=MYTAG' --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicIp' --output text); ssh ${host}"
Sinceramente, no sé cómo ProxyCommand
funciona la opción y tampoco man ssh
parece man ssh_config
hacer un buen trabajo explicándola.
¿Se puede lograr esto?
Respuesta1
ProxyCommand actúa como una alternativa para elconexión TCP sin formato.No reemplaza toda la conexión SSH, aunque a menudo se ve que se usa para invocar ssh -W
, pero sigue siendo simplemente usar otro sistema SSH para proporcionar un túnel TCP sin formato.
Entonces, en su situación, ProxyCommand debería ejecutar alguna aplicación simple de "tubería TCP" como nc
o socat
o ncat
: cualquier cosa que conecte stdin/stdout a una conexión TCP funcionará:
Host ...
ProxyCommand bash -c "host=...; nc $host %p"
Host ...
ProxyCommand bash -c "host=...; socat STDIO TCP:$host:%p"
Realmente recomendaría mover todas las cosas complejas de tu ~/.ssh/config a un script separado, para que tu configuración se vea así:
Host ...
ProxyCommand ~/bin/ec2-connect %h %p