ssh-agent의 목적은 무엇입니까?


70

공식 정의를 읽었습니다.

ssh-agent는 공개 키 인증 (RSA, DSA, ECDSA)에 사용되는 개인 키를 보유하는 프로그램입니다. 아이디어는 ssh-agent가 X 세션 또는 로그인 세션의 시작에서 시작되고 다른 모든 창 또는 프로그램은 ssh-agent 프로그램의 클라이언트로 시작된다는 것입니다. 환경 변수를 사용하면 ssh (1)를 사용하여 다른 시스템에 로그인 할 때 에이전트를 찾아 인증에 자동으로 사용할 수 있습니다.

".. 개인 키를 보유하는 프로그램 .." -IMHO-ssh 키는 ssh-keygen 명령을 사용하여 사용자에 의해 생성되고 간단하게 ~ / .ssh에 저장됩니다. 이러한 키를 보유하려면 데몬이 필요한 이유는 무엇입니까? 어쨌든 정확히 어떻게 보관합니까? 단지 .ssh에 저장되어 있지 않습니까?

"ssh-agent 프로그램의 클라이언트로 시작되었습니다" – 나는 그것을 얻지 못했습니다. 어디가 필요할까요? 나는 보통 ssh를 다음과 같이 사용합니다.

 ssh -i ~/.ssh/private_key_name username@hostname

"클라이언트"란 수동이 정확히 무엇을 의미합니까? 터미널에서 ssh 명령을 실행하여 연결하지 마십시오. 다른 클라이언트가 무엇이고 왜 ssh 명령처럼 ssh 개인 파일의 경로를 사용할 수 없습니까?

답변:


75

SSH 에이전트는 인증 데이터 서명을 처리합니다. 서버에 인증 할 때는 개인 키를 사용하여 일부 데이터에 서명해야합니다.

보안 수단으로 대부분의 사람들은 암호를 사용하여 개인 키를 현명하게 보호하므로 인증을 시도 할 때이 암호를 입력해야합니다. 이것은 바람직하지 않을 수 있으므로 ssh-agent는 키를 캐시하므로 에이전트가 암호를 해독하려고 할 때 암호를 한 번만 입력하면됩니다 (ssh-agent는 pam과 통합 될 수 있으므로 많은 배포판이 수행).

SSH 에이전트는 이러한 키를 클라이언트 프로그램에 전달하지 않지만 클라이언트가 데이터를 전송할 수 있고 서명 된 데이터로 응답 할 수있는 소켓 만 제공합니다. 이것의 부작용은 완전히 신뢰할 수없는 프로그램에서도 개인 키를 사용할 수 있다는 것입니다.

SSH 에이전트의 또 다른 이점은 SSH를 통해 전달 될 수 있다는 것입니다. 따라서 에이전트를 전달하는 동안 호스트 A로 ssh 할 때 호스트 A에 키가 존재하지 않아도 (암호화되지 않은) A에서 다른 호스트 B로 ssh 할 수 있습니다.


10
이것이 가장 완전한 대답이라고 생각하지만 여전히 한 가지 누락 된 점이 있습니다. 키 에이전트를 사용하면 여러 키를 쉽게 사용할 수 있습니다. 키 에이전트를 사용할 때 ssh는 키의 경로를 지정하지 않고 모든 키를 시도합니다.
Patrick

3
@Patrick도 불리 할 수 ​​있습니다-서버에서 너무 많은 유효하지 않은 키를 시도하면 유효한 키에 도달하기 전에 연결이 닫힙니다. 물론, 그 무엇 ~/.ssh/config의의 ' IdentityFile옵션 또는 에이전트없이 좋다
토비아스 Kienzler

에이전트없이 동등하게 가능 보인다 @Patrick
안드레이하기 Fedorov

@AndreyFedorov 예, 에이전트없이 여러 개의 키를 가질 수 있지만 ~/.ssh/config원격 키에 사용할 키를 지정하여 필요한 키를 정확히 알 수 있습니다.
Patrick

3
ssh-agent개인 키가 암호로 보호되지 않으면 필요하지 않다고 가정 할 수 있습니까?
pkaramol

16

이점 ssh-agent은 암호를 한 번만 입력하면된다는 것입니다. 개인 RSA 키가 암호로 암호화되지 않은 경우 ssh-agent가 필요하지 않습니다. 이 ssh명령은 클라이언트의 예입니다.


7

ssh각각 고유 한 키와 암호를 사용하여 다양한 다른 컴퓨터에 일상적으로 접속 하는 경우 세션을 시작하면 세션 시작시 ssh-agent각 키에 대한 암호를 1 회 입력 한 후 여러 번 각 컴퓨터에 인증 할 수 있습니다 암호를 다시 입력하지 않고도 원하는대로.

추가 이점은 man페이지에 따라 에이전트가 요청 채널을 통해 개인 키를 보내지 않는다는 것입니다. 따라서 다른 상자 사이를 이동하는 경우 개인 키가 보호됩니다.

1life 상담원이 키를 보관 하는 시간을 설정할 수 있습니다 .


6

Wikipedia 기사에 아마도 가장 좋은 설명이 있습니다.

서버에 대한 확인은 챌린지 응답 인증을 기반으로합니다. ssh는 사용자 이름과 키 요청으로 서버에 연결합니다. ssh 데몬은 요청을 받고 인증 파일에 저장된 공개 키를 기반으로 시도를 보냅니다. ssh는 개인 키를 사용하여 키 응답을 구성하고 연결의 다른 쪽 끝에있는 대기 sshd로 보냅니다. 개인 키 자체는 보내지 않습니다. ssh 데몬은 키 응답의 유효성을 검사하고 유효한 경우 시스템에 대한 액세스 권한을 부여합니다. ssh-agent는 SSH 연결을 수신하는 소켓을 작성하여이를 단순화합니다. 사용자는 단순히 ssh-agent를 시작하여 키를 찾는 방법을 알려주고 (기본 위치에 있지 않은 경우) 사용할 각 키의 암호를 한 번에 입력합니다.

위키 백과 기사에서 다시 한마디로 :

... ssh-agent는 소켓을 만든 다음 ssh에서 연결을 확인합니다. 이 소켓에 연결할 수있는 모든 사람은 ssh-agent에 액세스 할 수 있습니다. 권한은 일반적인 Linux 또는 Unix 시스템에서와 같이 설정됩니다. 에이전트가 시작되면 제한적인 권한으로 / tmp에 새 디렉토리를 만듭니다. 소켓은 폴더에 있습니다.

그것은 일반적으로 시스템 또는 사용자의 RC 파일 중 하나에 넣어 것 같은 $HOME/.bashrc$HOME/.profile(bash는 쉘의 경우) 환경 변수가 너무 ssh-agent완전히 사용자 환경에 통합 얻을 설정합니다.

Fedora 14 시스템에서는 X11 하위 시스템의 일부로 꽤 일찍 시작됩니다. 이 파일에서 /etc/X11/xinit/xinitrc-common:

# Prefix launch of session with ssh-agent if available and not already running.
SSH_AGENT=
if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then
    if [ "x$TMPDIR" != "x" ]; then
        SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
    else
        SSH_AGENT="/usr/bin/ssh-agent"
  fi
fi

변수 $SSH_AGENT는 다음과 같은 다른 X11 시작 스크립트에서 사용됩니다 /etc/X11/xinit/Xclients.

exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"

여기에 통합하면 다음 환경 변수가 상위 셸의 일부로 설정되므로 갈래의 모든 자식에도 변수가 있어야합니다.

SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;

이것에는 조금 더 복잡하지만 간단히 말해서 기본적으로 ssh-agent.

예를 들어 그놈에서 ssh-agent실제로는 사용자별로 시작 응용 프로그램으로 시작됩니다.

                     시작 앱의 ss

TL; DR

결론 ssh-agent은 ssh 키가 필요할 때 암호를 사용하여 한 번만 잠금 해제하면 (암호가 있다고 가정) 메모리에서 해독 된 형태 (RAM)로 사용할 수 있도록하는 것입니다.


1

"ssh-agent 프로그램의 클라이언트로 시작됨"은 모든 프로그램이 환경 변수를 가져 $SSH_AGENT_PID오고 $SSH_AUTH_SOCK에이전트를 연결하는 데 필요한 (로컬) 로그인 세션 초기화 중에 ssh-agent가 시작된다는 아이디어를 나타냅니다 .

ssh에서 개인 키 처리를 수행하는 또 다른 장점은 ssh-agent를 gpg-agent로 대체 할 수 있다는 것입니다. 따라서 SSH에 OpenPGP 키 (인증 기능 사용)를 사용할 수 있습니다. 스마트 카드의 OpenPGP 키를위한 훌륭한 솔루션입니다.

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