ssh配置動態IP

ssh配置動態IP

我有一個具有動態 IP 的 EC2 實例,我想直接連接到它,而不必.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 管道”應用程序,例如ncorsocatncat– 任何將 stdin/stdout 連接到 TCP 連接的東西都可以:

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

相關內容