터널을 통해 id_rsa로 ssh 구성 파일 설정


17

두 번째 컴퓨터와의 연결을 열고 다른 컴퓨터를 통과하고 id_rsa (비밀번호를 요청하는)를 사용하여 세 번째 컴퓨터에 연결하기 위해 유효한 구성을 설정하려고 애 쓰고 있습니다.

다른 포럼에서이 질문을했지만 매우 도움이 될만한 답변을받지 못했습니다.

더 잘 설명 된 문제는 다음과 같습니다.

Local machine: user1@localhost
Intermediary machine: user1@inter
Remote target: user2@final

pseudo-tty를 사용하여 전체 연결을 수행 할 수 있습니다.

ssh -t inter ssh user2@final

(이것은 컴퓨터 "inter"에있는 id_rsa 파일의 비밀번호를 묻습니다)

그러나 속도를 높이기 위해 .ssh / config 파일을 설정하여 다음을 사용하여 "최종"시스템에 간단히 연결할 수 있습니다.

ssh final

지금까지 내가 작동하지 않는 것은 .ssh / config 파일에 있습니다.

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

id_rsa 파일은 중간 머신에 연결하는 데 사용되며 (비밀번호 입력이 필요하지 않음) id_rsa_2 파일은 "최종"머신에 연결하는 데 사용됩니다 (이 파일은 비밀번호를 요청 함).

일부 LocalForward및 / 또는 RemoteForward필드를 혼합 하고 id_rsa 파일을 첫 번째 및 두 번째 시스템에 배치 하려고 시도했지만 구성이 없으면 성공하지 못한 것 같습니다.

추신 : 내가 도움을 얻으려고 시도한 스레드 :

http://www.linuxquestions.org/questions/linux-general-1/proxycommand-on-ssh-config-file-4175433750/

답변:


21

방법 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 사이의 "터널"입니다.

ncssh 세션 내에서 실행 되므로 모든 stdout은 "원시"트래픽으로 ssh 클라이언트에 다시 전달됩니다. 그리고 ssh 클라이언트는 nc stdin으로 트래픽을 전달할 수 있으며, 이는 final.com 포트 22에서 끝납니다.

위의 "터널"을 통해 로컬 ssh 클라이언트는 ssh 세션을 final.com직접 시작합니다 .

다음 명령

ssh -t inter ssh user2@final.com

ProxyCommandssh 데몬으로부터의 "원시"트래픽이 아니기 때문에 작동하지 않습니다 . 그것은 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 키가 올바르게 설정되어 있는지 확인

다른 키를 사용하는 경우 interfinal, 다음 파일을 로컬 컴퓨터에 있어야합니다

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.
Rubens

구성 파일, 게시 한 구성 파일도 작동해야합니다. 관통 이동하십시오 checking단계. 빠졌거나 잘못된 것이 있어야합니다.
John Siu

1
와 함께 ssh -t, 귀하의 SSH는하기 final에서 시작 inter으로 "거의"동일한 한 local# ssh interinter# ssh final. 인증은 ~ 사이 interfinal있습니다. proxy / nc를 사용하면 ssh to final은 로컬 컴퓨터에서 터널을 통해 시작됩니다 final. 인증은 ~ 사이 localfinal있습니다.
John Siu

@Rubens는 귀하의 의견을 바탕으로, 여전히 interssh-key를 사용하여 인증하고 있다고 착각합니다 final. ~ / .ssh / id_rsa_2 (로컬 ID_rsa를 쓰지 마십시오)에 복사 id_rsa_2하면 local문제가 발생했을 수 있습니다.
John Siu

2
ssh2는 nc내장되어 있습니다. 대신 에을 ProxyCommand ssh gateway nc %h %p쓰십시오 ProxyCommand ssh inter -W %h:%p.
user123444555621

2

실제로 오류가 발생하는 위치를 확인하는 데 도움이되는 실제로 나열된 오류 또는 ssh -v 문을 보지 못했습니다.

이봐, 당신은 거의 옳았습니다 .- 가장 안전하고 안전한 방법은 로컬 컴퓨터에 키를 두는 것입니다. 그런 다음 중간 단계에서 키를 남기지 않고 ssh-agent 전달을 사용하여 연결합니다. 또한 로그온 당 ​​한 번만 키 암호를 입력해야한다는 이점이 있습니다.

우분투와 같은 현대적이고 사용자 친화적 인 OS가있는 경우 (로컬 시스템에) * 마사지 *없이 문제가 발생하지 않습니다. 신원 파일을 의도적으로 제외 시켰으므로 필요하지 않습니다.

구성 파일은 다음과 같습니다.

Host inter
    User user1
    ForwardAgent yes
    HostName inter.com

Host final
    ForwardAgent yes
    User user2
    HostName final.com
    ProxyCommand ssh inter nc %h %p

그렇지 않은 경우 다음 단계를 수행하여 ssh-agent가 실행 중인지 확인하십시오.

'ssh-add -l' (lower case L) will list your private keys if any are loaded, or will be blank, or will say can’t connect to ssh-agent, if so, start ssh-agent.
'eval `ssh-agent`' (those are backticks) starts ssh agent
'ssh-add' will add your key… you can add a path argument if you have a key in a non-default area. At this point you will enter your passphrase.

이것이 어떻게 작동하는지 설명하는 멋진 안내서가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.