Конфигурация ssh с динамическим IP

Конфигурация ssh с динамическим IP

У меня есть экземпляр EC2 с динамическим IP-адресом, и я хотел бы подключиться к нему напрямую, не изменяя его .ssh/configкаждый раз при его изменении.

Я могу запросить IP с помощью

aws ec2 describe-instances --filters 'Name=tag:Name,Values=MYTAG' --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Association.PublicIp' --output text

Теперь я хочу добавить эту команду в ProxyCommandраздел моего .ssh/configфайла, но получаю несколько ошибок.

Это раздел для этого хоста

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}"

Честно говоря, я не знаю, как ProxyCommandработает эта опция, и ни один man sshиз них, man ssh_configпохоже, не объясняет ее толком.

можно ли этого достичь?

решение1

ProxyCommand действует как альтернативанеобработанное TCP-соединение.Он не заменяет все SSH-соединение (хотя вы часто видите, как он используется для вызова ) ssh -W, но это все равно просто использование другой SSH-системы для предоставления необработанного TCP-туннеля.

Таким образом, в вашей ситуации ProxyCommand должен запустить какое-нибудь простое приложение «TCP pipe», например, или nc– подойдет все, что подключает stdin/stdout к TCP-соединению:socatncat

Host ...
    ProxyCommand bash -c "host=...; nc $host %p"

Host ...
    ProxyCommand bash -c "host=...; socat STDIO TCP:$host:%p"

Я бы настоятельно рекомендовал перенести все сложные вещи из вашего ~/.ssh/config в отдельный скрипт, чтобы ваша конфигурация могла выглядеть примерно так:

Host ...
    ProxyCommand ~/bin/ec2-connect %h %p

Связанный контент