fish
쉘을 사용하고 있으며 단축키 ssh
기능은 다음과 같습니다.
function sshec2
ssh -i $HOME/.ssh/key.pem -t -t "ubuntu@$argv[1]"
end
특정 AWS EC2 인스턴스로 SSH를 연결하기 위해 명령 파이프라인 흐름을 작성했습니다.
ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
grep 'INSTANCE' |
grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|
head -1 |
sshec2
그러나 실행 시 함수가 작동하는 ssh: connect to host port 22: Connection refused
동안 오류가 발생합니다 .sshec2
sshec2 <ec2_public_ip>
제가 어리석은 부분을 놓쳤나요?
답변1
내가 올바르게 이해했다면 호스트 이름 목록( )을 생성하는 파이프라인이 있고 ec2-describe-instances … | grep … | grep …
첫 번째 줄( head -1
)을 선택하여 연결할 호스트 이름으로 사용하려고 합니다. 함수의 표준 입력에 호스트 이름을 전달 sshec2
하고 인수 없이 함수를 호출합니다. 따라서 함수가 실행되면 $argv[1]
은 비어 있으며 결국 ssh
매개변수 -i
, /home/dearrrfish/.ssh/key.pem
, -t
, 로 -t
실행 됩니다 ubuntu@
. 유효한 명령줄로 끝나고 ssh
연결이 이루어지면 … | head -1
파이프의 출력이 실행 중인 프로그램으로 파이프됩니다 ssh
.
함수의 첫 번째 매개변수로 호스트 이름을 전달해야 합니다. 이를 수행하는 도구는 다음과 같습니다.명령 대체.
sshec2 (ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
grep 'INSTANCE' |
grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |
head -1)