해결 방법: 중첩된 SSH 세션.

해결 방법: 중첩된 SSH 세션.

다음 설정을 가정합니다.

  1. 사용자는 bob자신의 워크스테이션에서 로컬로 작업하고 있습니다 foo.
  2. 사용자는 alice자신의 워크스테이션에서 로컬로 작업하고 있습니다 bar.
  3. 사용자는 에 저장된 키를 사용하여 bob서버에 SSH를 통해 연결할 수 있습니다.baz:22bob@foo:.ssh/id_rsa
  4. 사용자는 워크스테이션 alice에 SSH를 통해 연결할 수 있지만 서버에는 연결할 수 없습니다 .bobfoo:22baz

어떤 방법이 있나요?bobssh가 baz자신의 세션(포트 전달을 통해?) 또는 키( ssh-agent전달을 통해?) 를 공유하기 위해접근alice 가능bazbar패스 foo( bob신원은 로 가정 foo)?


부록:

좀 더 명확하게 해야 할 생각은 다음과 같습니다.

  1. bobalice그 사람의 비밀번호를 알고 싶지 않아
  2. bobalice계속 달리고 싶지는 않습니다 rm -rf /home/bob( foo하지만 baz분명히 괜찮습니다).

~처럼제안통과@mukesh-sai-kumar, 사람들은 거기에서 alice로그인하여 foo(예 bob: ?) ssh공유 비밀을 사용할 수 있습니다.

alice지금까지 내가 볼 수 있는 가장 좋은 방법은 on 에 대한 새 키 쌍을 생성하여 공개 키가 bar파일의 옵션을 통해 foo자동으로 열리고 실행 되도록 하는 것입니다.ssh bob@bazcommand="ssh [...]"authorized_keys

이렇게 하면 설정에서 ssh baz실제로 새로운 키 쌍을 bar사용 하고 이 특정 키를 사용하여 로그인을 다음으로 전달할 수 있습니다(인증된 키이지만 통화로 제한됨).ssh bob@fooalice@bar:.ssh/configbob@foobob@bazbob@foo:.ssh/authorized_keysalicecommandssh baz

이러한 방식으로 두 가지 새로운 제약 조건이 충족되고 alice가상의 대화형 세션에서 볼 수 있듯이 아무것도 표시되지 않습니다.

[alice@foo:~] (1) $ hostname
foo    
[alice@foo:~] (2) $ whoami
alice
[alice@foo:~] (3) $ ssh baz
[bob@baz:~] (1) $ hostname
baz    
[bob@baz:~] (2) $ whoami
bob
[bob@baz:~] (3) $ exit
[alice@foo:~] (4) $ hostname
foo    
[alice@foo:~] (5) $ whoami
alice
[alice@foo:~] (6) $

남은 유일한 문제는 bobSSH 키를 foo다른 사람과 공유해야 한다는 것입니다. bobssh세션이 다음 에서 시작되었습니다 .alice(통과하다 ssh-agent?).

답변1

.ssh/authorized_keysAlice는 자신의 공개 키를 Bob에게 제공할 수 있고, Bob은 Alice가 Bob의 워크스테이션에서 (Bob으로서) SSH 세션을 시작할 수 있도록 허용하는 행을 자신의 파일에 추가할 수 있습니다 foo. 이 command=옵션을 사용하면 Bob은 Alice의 키가 대화형 셸에 부여되는 것을 제한하고 대신 bazBob이 로컬로 액세스할 수 있는 키를 사용하여 Bob의 중첩 SSH 연결 에 부여할 수 있습니다 bar.

command="ssh -I .ssh/id_rsa bob@baz:22" ssh-rsa AAA...== alice@whatever

또는 더 많은 제약 조건 옵션( 등 - AUTHORIZED_KEYS 파일 형식에 대한 매뉴얼 페이지 섹션 참조 no-port-forwarding) 을 포함할 수 있습니다.from=sshd

Alice가 자신의 개인 키를 사용하여 실행하고 인증할 때 Bob의 워크스테이션에 있는 중간 세션을 제어하지 않고 Bob의 워크스테이션에 있는 ssh 세션에 ssh bob@bar연결합니다 .barbaz

(로깅, 보안 감사) 관점에서 보면 bazAlice가 시작한 터널 연결과 Bob이 자신의 워크스테이션에서 시작한 "일반" 연결 사이에는 차이가 없습니다. 이는 귀하가 요청한 것일 수도 있지만 원하는 것은 아닐 수도 있습니다.

보호된 키를 Alice의 세션에서 사용할 수 있도록 하려면 환경 변수를 SSH_AUTH_SOCKBob이 자신의 세션에 사용하는 경로로 명시적으로 설정하여(항목을 authorized_keys로 변경 command="SSH_AUTH_SOCK=/path/to/bobs/agent_socket ssh bob@baz:22" ssh-rsa AAA...) 경로가 변경될 때 경로를 업데이트할 필요가 없도록(일반적으로 /login 로그아웃하여) )), Bob은 Alice를 대신하여 명시적인 경로를 지정 ssh-agent -a ~/.ssh/agent_for_alice하고 특정 키를 추가 SSH_AUTH_SOCK=~/.ssh/agent_for_alice ssh-add ~/.ssh/id_rsa하고 비밀번호를 입력하여 전용 에이전트를 실행할 수 있습니다.

답변2

해결 방법: 중첩된 SSH 세션.

alice는 bob의 ID를 사용하여 bob의 워크스테이션(foo:22)에 SSH로 연결할 수 있으며, 그런 다음 bob의 ID(및 이제 alice가 액세스할 수 있는 그의 키)를 사용하여 baz에 SSH로 연결할 수 있습니다.

명령 기반 표현:

alice@bar:~$ ssh bob@foo
bob@foo's password:
---snip----
bob@foo:~$ ssh -i /home/bob/.ssh/id_rsa (your-user)@baz
----RSA ID based authentication----
your-user@baz:~$

그래픽 표현:

alice@bar -> Log into foo as user bob -> use bob's stored key to log into baz -> Achieved!

관련 정보