動的 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 パイプ」アプリを実行する必要があります。nc
または、stdin/stdout を TCP 接続に接続するものであれsocat
ばncat
何でもかまいません。
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