다음 설정을 가정합니다.
- 사용자는
bob
자신의 워크스테이션에서 로컬로 작업하고 있습니다foo
. - 사용자는
alice
자신의 워크스테이션에서 로컬로 작업하고 있습니다bar
. - 사용자는 에 저장된 키를 사용하여
bob
서버에 SSH를 통해 연결할 수 있습니다.baz:22
bob@foo:.ssh/id_rsa
- 사용자는 워크스테이션
alice
에 SSH를 통해 연결할 수 있지만 서버에는 연결할 수 없습니다 .bob
foo:22
baz
어떤 방법이 있나요?bob
ssh가 baz
자신의 세션(포트 전달을 통해?) 또는 키( ssh-agent
전달을 통해?) 를 공유하기 위해접근alice
가능baz
bar
패스 foo
( bob
신원은 로 가정 foo
)?
부록:
좀 더 명확하게 해야 할 생각은 다음과 같습니다.
bob
alice
그 사람의 비밀번호를 알고 싶지 않아bob
alice
계속 달리고 싶지는 않습니다rm -rf /home/bob
(foo
하지만baz
분명히 괜찮습니다).
~처럼제안통과@mukesh-sai-kumar, 사람들은 거기에서 alice
로그인하여 foo
(예 bob
: ?) ssh
공유 비밀을 사용할 수 있습니다.
alice
지금까지 내가 볼 수 있는 가장 좋은 방법은 on 에 대한 새 키 쌍을 생성하여 공개 키가 bar
파일의 옵션을 통해 foo
자동으로 열리고 실행 되도록 하는 것입니다.ssh bob@baz
command="ssh [...]"
authorized_keys
이렇게 하면 설정에서 ssh baz
실제로 새로운 키 쌍을 bar
사용 하고 이 특정 키를 사용하여 로그인을 다음으로 전달할 수 있습니다(인증된 키이지만 통화로 제한됨).ssh bob@foo
alice@bar:.ssh/config
bob@foo
bob@baz
bob@foo:.ssh/authorized_keys
alice
command
ssh 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) $
남은 유일한 문제는 bob
SSH 키를 foo
다른 사람과 공유해야 한다는 것입니다. bob
ssh
세션이 다음 에서 시작되었습니다 .alice
(통과하다 ssh-agent
?).
답변1
.ssh/authorized_keys
Alice는 자신의 공개 키를 Bob에게 제공할 수 있고, Bob은 Alice가 Bob의 워크스테이션에서 (Bob으로서) SSH 세션을 시작할 수 있도록 허용하는 행을 자신의 파일에 추가할 수 있습니다 foo
. 이 command=
옵션을 사용하면 Bob은 Alice의 키가 대화형 셸에 부여되는 것을 제한하고 대신 baz
Bob이 로컬로 액세스할 수 있는 키를 사용하여 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
연결합니다 .bar
baz
(로깅, 보안 감사) 관점에서 보면 baz
Alice가 시작한 터널 연결과 Bob이 자신의 워크스테이션에서 시작한 "일반" 연결 사이에는 차이가 없습니다. 이는 귀하가 요청한 것일 수도 있지만 원하는 것은 아닐 수도 있습니다.
보호된 키를 Alice의 세션에서 사용할 수 있도록 하려면 환경 변수를 SSH_AUTH_SOCK
Bob이 자신의 세션에 사용하는 경로로 명시적으로 설정하여(항목을 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!