방법 1 (인터뷰에서 ssh 키 사용)
인증 흐름을 유지하려는 경우
local -- authenticate --> inter -- authenticate (ask password) --> final
.ssh / config 프록시 호스트로는 수행 할 수 없습니다.
bash 쉘 별칭이 필요합니다 (bash를 사용하고 있기를 바랍니다).
에서 ~/.bashrc
다음 줄을 추가하십시오.
alias ssh-final='ssh -t inter ssh user2@final.com'
명령 프롬프트에서 다음을 입력하십시오.
ssh-final
final
섹션 ~/.ssh/config
은 사용되지 않습니다.
연결 세부 사항 (1)
ssh -t inter ssh user2@final.com
다음과 같이 볼 수 있습니다
local# ssh inter
inter# ssh user2@final.com
local
에 "토킹"합니다 inter
. local
와 사이에 직접 또는 간접 ssh 연결이 없습니다 final
. local
의 출력 만 표시합니다 ssh user2@final.com
.
방법 2 (로컬에서 ssh 키 사용)
동일한 ssh 키로 인증
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
로컬 ~/.ssh/id_ras.pub
로 복사
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
연결 세부 사항 (2)
ssh 터널링
에 대해 자세히 ProxyCommand
알아보기 전에 다음 예제를 살펴 보겠습니다.
터미널 창 1의 1 단계
local# ssh inter -L 2000:final.com:22
터미널 창 2의 2 단계
local# ssh localhost -p 2000
터미널 1에서 터널은 로컬 포트 2000과 final.com 포트 22 사이에 설정됩니다. 로컬 포트 2000으로 전송 된 모든 것은 final.com 포트 22로 전달되며 그 반대도 마찬가지입니다.
터미널 2에서 ssh는 로컬 포트 2000에 연결하지만 실제로는 final.com 포트 22 (sshd)와 통신합니다.
터널링을 사용하면 2 단계의 로컬 ssh 클라이언트가 final.com sshd와 직접 연결됩니다.
로컬 포트 2000의 "출력"은 "원시"ssh 데몬 트래픽입니다.
이러한 터널의 일반적인 사용법은 내부 웹 서버 또는 전자 메일 서버에 액세스하는 것입니다. 다음은 웹 서버의 예입니다
local# ssh inter -L 2000:final.com:80
브라우저에서 다음 URL을 사용하십시오.
http://localhost:2000
터널의 두 끝점은 로컬 포트 2000과 final.com 포트 80입니다.
터널 끝점 "AS IS"로 들어오고 나가는 트래픽. "원시"트래픽을 호출 할 수 있습니다.
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
는 ProxyCommand
한 단계 더 걸릴. 로컬 포트 생성 단계를 건너 뛰고 연결합니다.
ssh 클라이언트는 뒤에 주어진 명령을 실행하고 ProxyCommand
해당 명령의 출력을 "원시"트래픽으로 취급합니다. 로컬 끝점을 잡고 ssh 연결을 시작합니다.
왜 다른 하나는 작동하지 않습니까?
다음 명령
ssh inter nc final.com 22
기본적으로 (1) 연결 inter
한 다음 (2) 켜기 inter
명령을 실행 nc final.com 22
합니다.
nc - arbitrary TCP and UDP connections and listens
따라서 nc final.com 22
, 포트 (22)에 final.com 연결 표준 출력에 들어오는 모든 트래픽을 인쇄하고 반대편으로 모든 표준 입력을 보낼 것입니다. nc stdin / out과 final.com 포트 22 사이의 "터널"입니다.
nc
ssh 세션 내에서 실행 되므로 모든 stdout은 "원시"트래픽으로 ssh 클라이언트에 다시 전달됩니다. 그리고 ssh 클라이언트는 nc stdin으로 트래픽을 전달할 수 있으며, 이는 final.com 포트 22에서 끝납니다.
위의 "터널"을 통해 로컬 ssh 클라이언트는 ssh 세션을 final.com
직접 시작합니다 .
다음 명령
ssh -t inter ssh user2@final.com
ProxyCommand
ssh 데몬으로부터의 "원시"트래픽이 아니기 때문에 작동하지 않습니다 . 그것은 ssh 클라이언트 의 표준입니다 . 고객과의 대화는 비즈니스가 없음을 의미합니다.
다른 ssh 키를 사용한 인증 (OP 원본 구성)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
로컬 ~/.ssh/id_ras.pub
로 복사
/home/user1/.ssh/authorized_keys in `inter`
로컬 ~/.ssh/id_ras_2.pub
로 복사
/home/user2/.ssh/authorized_keys in `final`
위의 두 가지 모두 다음 사용법을 가능하게합니다.
local# ssh final
추가 점검
자세한 정보 사용
local# ssh -v final
ssh 문제를 식별하는 데 도움이됩니다.
nc 점검
ProxcyCommand
에 실행 중 nc
입니다 inter
. 에서 nc
실제로 사용 가능한지 확인하십시오 inter
.
local# ssh inter
inter# nc final.com 22
RSA 키가 올바르게 설정되어 있는지 확인
다른 키를 사용하는 경우 inter
와 final
, 다음 파일을 로컬 컴퓨터에 있어야합니다
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
inter
이미 ssh 할 수 있으므로에서 키 설정을 확인하십시오 final
. 로컬 머신에서
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
id_rsa_2.pub
거기에 내용이 표시되어야합니다 .
ssh -t
있지만ssh -t
의 구성 만 사용 하여 사용 하는 동작을 정확하게 시뮬레이트하고 싶습니다.ssh/config
.