동적 IP를 사용한 SSH 구성

동적 IP를 사용한 SSH 구성

.ssh/config동적 IP를 사용하는 EC2 인스턴스가 있는데 변경될 때마다 수정할 필요 없이 직접 연결하고 싶습니다 .

나는 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는 nc또는 socat또는 같은 간단한 "TCP 파이프" 앱을 실행해야 합니다 ncat. TCP 연결에 stdin/stdout을 연결하는 모든 작업은 다음과 같습니다.

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

관련 정보