AWS에서 발판 서버에서 프라이빗 서브넷 EC2로 peco를 사용하여 SSH

4391 단어 SSHEC2PecoAWS
아래 그림과 같이 퍼블릭 서브넷과 프라이빗 서브넷을 나누어 발판 서버 이외에는 프라이빗 서브넷에 배치하는 구성이 자주 있다고 생각합니다.
발판 서버는 EIP로 글로벌 IP를 할당하면 됩니다만, 프라이빗 서브넷에 배치한 EC2들, 게다가 AutoScaling에 의해 IP가 부정한 것에 간단하게 SSH하고 싶었으므로, 조금 스크립트를 짜 보았습니다.

예상되는 AWS 구성





프라이빗 서브넷의 EC2에는 직접 SSH가 불가능





한 번에 2단 SSH를 위한 명령



다음 기능을 ~/.config/fish/config.fish에 추가하십시오.

fish 쉘의 function을 정의하고 있으므로, bash나 zsh의 분은 적절히 읽어 주세요.aws 명령은 --profile 또는 --region를 명시하고 있으므로 여기도 적절하게 변경하십시오.
발판 서버와 대상 서버에서 SSH 키가 다른 경우 첫 번째 $key에 발판 키, 두 번째 $key에 대상 서버의 SSH 키를 지정하도록 다시 씁니다.
function ec2-ssh-myaws
  echo "ec2-user" | read -l user
  echo "~/.ssh/myaws.pem" | read -l key
  aws --profile myaws ec2 describe-instances --region ap-northeast-1 --output json --filters "Name=network-interface.group-name,Values=Bastion" | jq -r '.Reservations[].Instances[] | .PublicIpAddress' | read -l bastion
  echo "bastion server $bastion"
  aws --profile myaws ec2 describe-instances --region ap-northeast-1 --output json --filters "Name=instance-state-code,Values=16" | jq -r '.Reservations[].Instances[] | [.Tags[] | select(.Key == "Name").Value][] + "\t" +  .InstanceType + "\t" + .PrivateIpAddress + "\t" + .Platform' | awk '{if ($4 != "windows") printf "%-45s %-15s %-10s\n",$1,$2,$3}' | sort | peco | command awk '{print $3}' | read -l host
  echo "target server $host"
  ssh -o ProxyCommand="ssh -i $key -p 22 $user@$bastion -W $host:22" -i $key -p 22 $user@$host
end

추가가 끝나면 다음과 같이 function을 호출하면 프라이빗 서브넷에 있는 EC2 목록이 표시되어 선택한 서버로 연결됩니다.
ec2-ssh-myaws

function이하는 일에 대한 설명


  • 발판 서버에 EIP를 할당하지 않고도 대응할 수 있도록 발판 서버의 Public IP를 aws 명령으로 가져 오기
  • 시작 중 EC2 목록을 얻고 선택하기 쉽도록 성형 한 다음 peco에 전달
  • 발판 서버와 선택한 대상 서버의 정보로 SSH

  • 끝에



    이 설정을 사용하여 편하게 하기 시작한 화살촉에 다음과 같은 기사가 공개되었습니다.

    SSH 불필요한 시대가 올까요? AWS Systems Manager 세션 관리자가 출시되었습니다!

    AWS Systems Manager 세션 관리자가 있다면 이번 설정이 필요하지 않을 수 있습니다.

    참고 링크


  • peco와 EC2 API를 사용하여 발판을 통해 SSH 로그인을 편하게
  • AWS에서 발판 앞의 EC2에 태그로 ssh
  • 좋은 웹페이지 즐겨찾기