
AWS에서 두 개의 EC2 인스턴스를 생성했습니다. 각각에 대해 키 쌍을 만들었습니다. .pem 개인 키를 다운로드하여 .ppk
형식으로 변환했습니다. PuTTY와 해당 .ppk 프라이빗 키를 사용하여 각 ec2 인스턴스에 연결할 수 있습니다. 하지만 EC2 인스턴스 중 하나에서 다른 인스턴스로 SSH를 연결하려면 어떻게 해야 합니까? 둘 중 하나의 공용 DNS를 다른 쪽에서 핑할 수 있습니다. 그러나 한 곳에서 다른 곳으로 ssh를 시도하면 다음과 같은 결과를 얻습니다.
권한이 거부되었습니다(공개키).
답변1
방법 1 - 서버에서 동일한 키를 사용합니다.
키를 openssh 형식으로 변환개인 키를 서버에 업로드합니다. 대상 호스트에 SSH를 통해 연결할 때 개인 키 파일을 지정합니다.
ssh -i mykey.pem private.ip.of.other.server
방법 2 - 새 키 만들기
각 서버에서 다음을 실행합니다.
ssh-keygen
Enter Enter Enter를 누르세요. 두 개의 파일이 있습니다.
.ssh/id_rsa
.ssh/id_rsa.pub
~에서버 A, cat 및 공개 키를 클립보드에 복사합니다.
cat ~/.ssh/id_rsa.pub
[select and copy to your clipboard]
SSH로서버 B, 그 내용을 Authorized_keys 파일에 추가합니다.
cat >> ~/.ssh/authorized_keys
[paste your clipboard contents]
[ctrl+d to exit]
이제 서버 A에서 ssh를 실행합니다.
ssh -i ~/.ssh/id_rsa private.ip.of.other.server
답변2
세 번째와 IMHO가 소위 최고의 솔루션이 있습니다.SSH 에이전트 전달:
- 로컬 시스템에서 다음 섹션을 추가하여 ~/.ssh/config를 구성합니다.
Host <ip-or-name-of-A-server> ForwardAgent yes
- 서버 A와 B에 로컬 ~/.ssh/id_rsa.pub가 서버의 ~/.ssh/authorized_keys에 추가되어 있다고 가정합니다.
서버 A에서 작업하는 동안 추가 SSH 통신에 키를 사용할 수 있습니다. 예:
- SSH 클라이언트를 사용하여 다른 서버에 연결(이 경우 서버 B에 연결)
- scp(보안 복사본),
- git - 로컬 ID를 사용하여 원격 git 저장소로 풀/푸시할 수 있습니다.
- 등.
이것이 작동하는지 확인하려면 다음을 수행하십시오.
- 서버 A에 연결
- SSH_AUTH_SOCK env var를 감지하여 키 교환을 위한 소켓 연결이 있는지 확인하세요.
set|grep SSH_AUTH_ # output should be something like this: SSH_AUTH_SOCK=/tmp/ssh-sEHiRF4hls/agent.12042
노트:
- SSH 에이전트를 실행해야 합니다. - linux:
ps -e | grep [s]sh-agent
Windows의 경우 putty의 유틸리티 pagent 및 plink를 확인하세요. - 참조:https://help.github.com/articles/using-ssh-agent-forwarding
- SSH 문제 해결:
https://confluence.atlassian.com/display/BITBUCKET/Troubleshoot+SSH+Issues
답변3
문제에 대한 새로운 AWS 솔루션입니다.
이에 대한 블로그 게시물은 다음과 같습니다.
참고:
SSH 공개 키는 인스턴스 메타데이터에서 60초 동안 일회성으로만 사용할 수 있습니다. 인스턴스에 성공적으로 연결하려면 이 시간 내에 SSH를 사용하여 연결해야 합니다. 키가 만료되므로 이전처럼 이러한 키를 직접 추적하거나 관리할 필요가 없습니다.