간단한 질문이지만 며칠 동안 검색해도 성공하지 못했습니다.
M = My machine
J = Jump Host
S = Server
Jump Host has my public key on authorized_keys.
Server has J's public key on authorized_keys.
Allowed connections (due to key authentication):
M -> J
J -> S
내 컴퓨터에서 S로 SSH를 통해 연결하는 것이 어떻게 가능합니까?
내 현재 구성은 다음과 같습니다
host jump
user root
HostName x.x.x.x
host server
user root
HostName x.x.x.x
port 22
ForwardAgent no
ProxyCommand ssh jump -W %h:%p
M키로 로그인을 시도하니 동작하지 않습니다.
SSH 로그는 다음과 같습니다.
debug1: Host 'x.x.x.x' is known and matches the ECDSA host key.
debug1: Found key in /Users/xxxxx/.ssh/known_hosts:1542
...
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/xxxxx/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: Trying private key: /Users/xxxxx/.ssh/id_dsa
debug1: Trying private key: /Users/xxxxx/.ssh/id_ecdsa
debug1: Trying private key: /Users/xxxxx/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).
Killed by signal 1.
답변1
문제는 J의 키를 사용해야 하는데 S에서 인증하기 위해 내 키(M)를 사용하려고 한다는 것입니다. 내 컴퓨터가 아닌 J에 있기 때문에 IdentityFile과 함께 사용할 키를 지정할 수 없습니다.
그게 당신의 문제입니다. 점프 호스트와 최종 대상에 대한 연결은 이 설정에서 클라이언트에서 직접 시작됩니다. 클라이언트는 두 시스템 모두에 대해 올바른 키를 가지고 있어야 합니다.
프록시 명령 은 ssh jump -W %h:%p
점프 호스트에 대한 SSH 세션을 시작하지만 셸을 생성하지 않고 대상 호스트에 직접 터널을 생성합니다. 그런 다음 클라이언트가 터널에 SSH를 만듭니다. 이러한 유형의 설정에서는 중간 호스트에 저장된 키에 액세스할 수 있는 점프 호스트에서 쉘이 시작되지 않습니다. 전달을 어지럽히는 것은 아무 일도 하지 않습니다. 연결을 시작하는 데 전달이 사용되지 않습니다.
답변2
방화벽에 로그인하지 마십시오. 방화벽은 패킷을 제한하는 네트워크 장비입니다. 이 시나리오에서는 기본적으로 보이지 않습니다. 패킷이 포트 22 입력이고 아마도 높은 범위의 포트 출력인 배스천 호스트(점프 호스트) 서버에 도달할 수 있도록 구성해야 합니다.
서버에 직접 로그인하므로 이를 허용하도록 구성해야 합니다. 동일한 네트워크의 다른 컴퓨터에서 이를 테스트합니다. 이 배스천 호스트에서 프라이빗 서브넷에서 보호하는 머신에 로그인할 수 있습니다.
추가 정보를 기반으로 업데이트 대상 서버에는 요새/점프 호스트 키가 필요하지 않으며 키가 필요합니다. 서버에 액세스하려는 것은 요새가 아니라 사용자, 즉 당신입니다.
한 걸음 물러서세요. 키를 사용하여 동일한 서브넷에 있는 다른 서버에서 SSH를 사용하여 대상 서버에 액세스할 수 있는지 확인하세요. 그런 다음 요새 호스트에서 시도해 보세요.