사용자 이름 / 비밀번호 대신 키를 사용하여 인증하도록 ssh를 어떻게 설정합니까?


34

사용자 이름 / 비밀번호 대신 키를 사용하여 사용자를 인증하도록 ssh를 어떻게 설정합니까?

답변:


27

각 사용자에 대해 : 그들은 (자신의 로컬 컴퓨터에) 생성해야 자신의 키 쌍을 사용 ssh-keygen -t rsa합니다 (이 rsa로 대체 할 수 dsa또는 rsa1해당 옵션이 권장되지 않습니다 있지만, 너무). 그런 다음 공개 키 ( id_rsa.pub) 의 내용을 ~/.ssh/authorized_keys로그인중인 서버에 넣어야합니다 .


이것에 추가 할 유일한 것은 파일과 디렉토리에 대한 권한을 보는 것입니다.
trent

2
chmod 0700 .ssh를 잊지 마십시오. chmod 0600 .ssh / authorized_keys
Dave Cheney

3
이 방법으로 키를 확실히 생성 한 다음 "ssh-copy-id"에 관한 @Chris Bunch의 게시물을 확인하십시오. 이것이 'id_rsa.pub'을 전송하는 방법입니다.
Gareth 2016

@ 갸 레스 : 감사합니다! 방금 새로운 것을 배웠습니다! :-D
Chris Jester-Young

23

실제로 ssh-copy-id를 선호합니다. 기본적으로 * nix에서 찾을 수있는 스크립트 ( Mac OS X에도 쉽게 넣을 수 있음 )가 자동으로이를 수행합니다. 매뉴얼 페이지에서 :

ssh-copy-id는 ssh를 사용하여 원격 컴퓨터에 로그인하는 스크립트입니다 (아마도 로그인 암호를 사용하므로 여러 ID를 영리하게 사용하지 않는 한 암호 인증을 활성화해야합니다)

또한 원격 사용자의 홈인 ~ / .ssh 및 ~ / .ssh / authorized_keys의 권한을 변경하여 그룹 쓰기 기능을 제거합니다 (원격 sshd에 구성에 엄격한 모드가 설정되어 있으면 로그인 할 수 없음).

-i 옵션이 제공되면 ssh-agent에 키가 있는지 여부에 관계없이 ID 파일 (기본값은 ~ / .ssh / identity.pub)이 사용됩니다.


2
@Chris Bunch 모두가 여기를 보라! :) ssh-copy-id는 확실히 자신의 id_rsa.pub를 공유하는 방법입니다
Gareth

1
쿨, 나는 이것에 대해 전혀 몰랐습니다 ... 나는 정확히 같은 일을하기 위해 내 자신의 스크립트를 작성 :-/
David Z

6

흠, 이해하지 마십시오. 키를 만들고 시작하면됩니다. :) HOWTO 또한 비밀번호를 통한 로그인을 금지 할 수 있습니다. 예를 들어 / etc / ssh / sshd_config에서 :

PasswordAuthentication no

2
또한 UsePAM no를 설정하거나 그에 따라 PAM을 구성해야합니다. 얼마나 많은 HOWTO가이 부분을 놓치고 있는지 놀랍습니다. 그렇지 않으면 비밀번호를 사용하여 계속 로그인 할 수 있습니다.
Nathan Nathan

3

이 작업은 매우 간단 합니다 . 여기 에는 간단한 연습이 있습니다 .

요점은 다음과 같습니다.

  • ssh-keygen컴퓨터에서 실행하십시오 . 그러면 공개 및 개인 키가 생성됩니다.
  • 복사 (가능성이있는 공개 키의 내용을 붙여 ~/.ssh/id_rsa.pub에) ~/.ssh/authorized_keys원격 시스템.

이렇게하면 컴퓨터의 개인 키에 액세스 할 수있는 모든 사람에게 원격 컴퓨터에 대한 동일한 액세스 권한이 부여되므로 키 페어를 생성 할 때 추가 보안을 위해 여기에 비밀번호를 입력하도록 선택할 수 있습니다.


복사하는 대신 잘라서 붙여 넣기를 권장합니다. certified_keys 파일은 여러 키를 포함 할 수 있으며 이미있는 다른 키를 복제하지 않으려 고합니다.
Chris Jester-Young

내가 가장 좋아하는 연습은 Wayback Machine에 위탁되었습니다 : web.archive.org/web/20061103161446/http://…
Philip Durbin

@Chris oops-덮어 쓰지 않고 파일에 복사하는 것을 의미했습니다! 답을 명확히하기 위해 지금 업데이트되었습니다
ConroyP


1

다른 사람들이 말한 것을 요약하면 SSH 키를 설정하는 것이 쉽고 중요합니다.

SSH 할 머신 에서 키 페어를 생성해야합니다.

claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius

표시된 곳에서 Enter 키를 누르고 프롬프트가 표시되면 암호를 입력하십시오. 이상적으로 이것은 현재 호스트 및 SSH를 연결할 호스트의 일반 로그인 비밀번호와 다릅니다.

다음으로 방금 생성 한 키를 SSH하려는 호스트에 복사해야 합니다 . 대부분의 Linux 배포에는 다음 ssh-copy-id을 수행하기위한 도구 가 있습니다.

claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

배포판에없는 경우 키를 대상 호스트에 복사하여 키를 기존 .ssh/authorized_keys파일에 추가해야 합니다.

claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub                                    100% 1119     1.1KB/s   00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May  9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys

마지막으로 SSH 키를 최대한 활용하려면 SSH 에이전트를 실행해야합니다. 데스크탑 환경 (Gnome, KDE 등)을 사용하는 경우 로그 아웃했다가 다시 로그인하면 SSH 에이전트가 시작됩니다. 그렇지 않다면, 당신은 당신의 쉘에 RC 파일 (다음을 추가 할 수 있습니다 .bashrc, .profile등) :

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi

1

이것은 체크리스트를위한 것입니다. 점을 따르는 경우 암호없는 로그인에 대한 가장 일반적인 문제를 다뤄야합니다. 이러한 요점의 대부분은 다른 곳에서 언급됩니다. 이것은 집계입니다.

연결을 시작하거나 수신 할 계정 아래 각 머신에 ~/.ssh디렉토리 가 있어야합니다 chmod 700.

(비공개) 키는 암호없이 생성되거나 클라이언트가 사용할 암호 구문 키의 암호 해독 된 버전을 보유하는 에이전트를 시작할 수 있습니다. 로 에이전트를 시작하십시오 ssh-agent $SHELL. 그것은이다 $SHELL찾을 걸 렸어요 부분. 에이전트를 사용하려면 다양한 세부 정보가 있으므로 매뉴얼 페이지를 참조하십시오.

최근 버전의 sshd에서는 기본적으로 약한 (<2048 비트 DSA) 키를 사용할 수 없습니다.

연결 을 시작 하려면 클라이언트 측 시스템에서 다음을 수행해야합니다 .

  1. 개인 키는 ~/.ssh/id_rsa또는 ~/.ssh/id_dsa적절하게 배치해야합니다 . 다른 이름을 사용할 수도 있지만 개인 키를 명시 적으로 나타내려면 원래 시스템의 ssh 명령에서 -i 옵션에 포함시켜야합니다.

  2. 개인 키는이어야합니다 chmod 600.

  3. 홈 폴더가인지 확인하십시오 chmod 700.

이제 기계가 요청 을 받도록 허용합니다 . 일반적인 모델은 관리자가 소유하지 않은 컴퓨터 (예 : 공유 웹 호스팅)에 대한 액세스 권한을 부여하는 곳입니다. 따라서 ssh의 아이디어 는 계정을 제공하는 사람에게 공개 키를 제공한다는 것 입니다. 그렇기 때문에 일반적으로 요청을받는 컴퓨터에 개인 키를 넣지 않습니다. 그러나이 시스템이 발신 ssh도 수행하도록하려면 위 단계를 수행하여 원래 시스템으로 취급해야합니다.

  1. 공개 키는 연결 ~/.ssh/authorized_keys받을 계정 아래 에있는 파일에 있어야합니다 . 이 계정을 통해 연결할 수있는 다른 키도 여기에 배치 할 수 있습니다. vi에 있고 PuTTY의 붙여 넣기 버퍼에서 파일에 키를 붙여 넣는 경우 특히 까다로운 점은 다음과 같습니다. 키는 "ssh-"로 시작합니다. 삽입 모드가 아닌 경우 첫 번째 "s"는 vi를 삽입 모드로 설정하고 나머지 키는 잘 보입니다. 그러나 키 시작 부분에 "s"가 없습니다. 그것을 찾는 데 며칠이 걸렸습니다.
  2. 나는 좋아한다 chmod 600 ~/.ssh/authorized_keys. gw 이상이어야합니다.
  3. 이제 호스트 지문을 캐시에 추가해야합니다. 머신 A로 이동하고 머신 B를 수동으로 ssh로 이동하십시오. 처음으로 "호스트 키 캐시에 ..를 추가 하시겠습니까?"와 같은 쿼리가 표시됩니다. 이 로그인을 사용하기 위해 스크립트 (예 : 스크립트)를 자동화하려는 경우 자동화에서 사용중인 ssh 클라이언트에이 프롬프트가 표시되지 않아야합니다.

0

다른 사람들이 말했듯이 사용자는 ssh-keygen을 사용하여 클라이언트 컴퓨터에서 자신을 위해 키 쌍을 만들고 공개 키를 로그인하려는 컴퓨터의 ~ / .ssh / authorized_keys에 추가해야합니다.

자세한 내용은 SSH (Secure Shell)를 강력히 권장 합니다 .


0

여기에는 좋은 조언이 있으므로 반복하지 않겠습니다. 키로 사인온 할 수 있도록 하나의 서버를 설정하면이 하나의 라이너로 다른 서버도 동일하게 설정할 수 있습니다.

remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done

홈 디렉토리로 cd하고, 변수 remote를 하나 이상의 서버 이름으로 정의하고 한 번에 한 묶음을 수행하십시오. 요청한 비밀번호는 원격 서버의 ssh 비밀번호입니다. 물론 for-loop없이 단순화 된 버전을 사용할 수 있습니다.

tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"

기억할 사항 : 공개 키만 복사하십시오. 개인 키는 sudo를 가진 사람이 키를 복사하여 암호를 무차별 적으로 처리 할 수있는 일부 서버에두기를 원하지 않습니다.

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