動的 IP を使用した 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 sshman ssh_configそれをうまく説明していないようです。

これは達成できるでしょうか?

答え1

ProxyCommandは、生の TCP 接続。これは SSH 接続全体を置き換えるものではありませんが、 を呼び出すために使用されることがよくありますssh -W。ただし、これは依然として別の SSH システムを使用して生の TCP トンネルを提供しているだけです。

したがって、あなたの状況では、ProxyCommand は次のような単純な「TCP パイプ」アプリを実行する必要があります。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

関連情報