![SSH 기능을 스크립팅할 때 "연결이 거부되었습니다" 오류](https://linux55.com/image/84698/SSH%20%EA%B8%B0%EB%8A%A5%EC%9D%84%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85%ED%95%A0%20%EB%95%8C%20%22%EC%97%B0%EA%B2%B0%EC%9D%B4%20%EA%B1%B0%EB%B6%80%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4%22%20%EC%98%A4%EB%A5%98.png)
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)