bash 스크립트는 ssh -i를 사용할 수 없습니다. 디렉토리를 볼 수 없습니다

bash 스크립트는 ssh -i를 사용할 수 없습니다. 디렉토리를 볼 수 없습니다

뭔가 이상한 일을 겪고 있어요. 서버에 Splunk를 원격으로 설치하기 위한 스크립트를 작성 중입니다. 이 스크립트에서는 실습 서버(Redhat을 실행하는 Amazon EC2 인스턴스 5개)에 SSH를 통해 연결합니다.

그러나 스크립트를 실행하면 다음 오류가 발생합니다.

Warning: Identity file ~/Keypairs/jadam-macbookpro-ec2-1.pem not accessible: No such file or directory.

나의 첫 번째 단계는 분명히 경로가 있는지 확인하는 것입니다. 실행 명령을 복사하여 터미널에 붙여넣습니다. 키 페어를 사용하여 인스턴스에 성공적으로 연결했습니다.

문제의 명령어입니다. sudo 접두사를 사용하거나 사용하지 않고 명령을 시도했습니다.

KEYPAIR="~/Keypairs/jadam-macbookpro-ec2-1.pem"
sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"

REMOTE_SCRIPT는 실행할 스크립트 파일이고 DST는 호스트 파일에서 추출된 서버 주소입니다.

해결된 명령은 다음과 같습니다.

ssh -i ~/Keypairs/jadam-macbookpro-ec2-1.pem [email protected]

스크립트는 실패하지만 명령을 복사하고 수동으로 실행하면 작동합니다. 처음에는 권한 문제인 줄 알고 sudo로 실행했지만 디렉터리가 존재하지 않는 줄 알았습니다.

어떤 아이디어가 있나요?

답변1

실제로 해결한 명령이 올바르지 않습니다. 실제로 그렇습니다:

ssh -i "~/Keypairs/jadam-macbookpro-ec2-1.pem" "[email protected]"

큰따옴표는 셸 확장을 방지 ~하고 이를 리터럴( 에 직접 전달됨 ssh)로 처리합니다. 이를 환경 변수로 바꾸면 $HOME문제가 저절로 해결됩니다.

KEYPAIR="$HOME/Keypairs/jadam-macbookpro-ec2-1.pem"
sudo ssh -i "$KEYPAIR" "$DST" "$REMOTE_SCRIPT"

나는 다음과 같이 ssh평가할 것이라는 점을 지적해야 한다 .~메인 디렉토리, 그러나 이 경우에는 사용자 컨텍스트 대신 루트 컨텍스트에서 수행하므로 $HOME/.ssh디렉토리에서 파일을 찾지 않습니다.

관련 정보