비밀번호를 입력하지 않아도되도록 SSH를 어떻게 설정합니까?


153

호스트에 연결할 때 비밀번호를 입력하지 않아도되도록 SSH를 어떻게 설정합니까?


그러한 키를 사용하는 데 암호가 필요하지 않은 경우 논쟁 할 수 있습니다. 개인 키를 소유 한 사람이 실제로이를 악용 할 수 없도록 암호 자체를 통해 키를 보호 할 수 있습니다. 물론 암호를 비워 둘 수도 있지만 권장하지 않는 경우가 많습니다.
Arjan

최신 SSH를 사용하는 최신 Cygwin에서 ~/.ssh/config현재 필요한 사항을 변경해야했기 때문에 다시 프롬프트되었습니다.PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
HDave

답변:


164

SSH 키 생성 (없는 경우)

그놈을 사용한다면, 해마 응용 프로그램 ( "비밀번호 및 암호화 키")이이를 수행 할 수 있습니다 : 파일 -> 새로 만들기 -> 보안 쉘 키 .

터미널을 선호하는 경우 키 페어를 생성하도록 실행하십시오 . 유효한 키 쌍 유형은 다음과 같습니다.ssh-keygen -t <type>

  • rsa : 기본
  • dsa : 1024 비트 키로 제한되는 것을 제외하고 거의 동등
  • ecdsa : 작은 키를 사용하는 동일한 보안이지만 SSH 소프트웨어에서는 비교적 새롭고 다소 드 rare니다.
  • ed25519 : 높은 보안 성 (사이드 채널 공격 및 약한 난수 생성기에 대한 내성). 매우 빠른 서명 생성. 아주 새로운. OpenSSH 에서만 사용 가능 > = 6.5 .

프로그램에서 암호 와 새 키를 저장할 위치 를 묻습니다 . 제안 된 기본 경로를 사용하는 것이 좋습니다. 다른 모든 도구는 해당 경로를 찾습니다.

공개 키를 원격 서버에 업로드

다시 말하지만, 해마 는 종종 내 개인 키 에서 SSH 키를 마우스 오른쪽 버튼으로 클릭하고 보안 쉘을위한 키 구성을 선택하여이를 수행 할 수 있습니다 .

또는 ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host터미널에서.

또는 완전히 수동으로 단계별로 :

  1. .ssh원격 호스트에서 원격 사용자의 홈 디렉토리에 이름이 지정된 디렉토리를 작성하십시오 (없는 경우) .
  2. 해당 디렉토리에 이름 authorized_keys이없는 파일을 작성하십시오 (아직없는 경우).
  3. 리모컨 umask이 평소보다 더 자유로운 경우 파일을 그룹 쓰기 가능으로 만들지 마십시오 chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. 마지막으로 로컬 공개 키 ( ~/.ssh/id_rsa.pub) 의 내용을 원격 ~/.ssh/authorized_keys파일에 복사 (추가) 합니다.

ssh 에이전트에 키를로드하십시오.

개인 키를 ssh 에이전트에 로드 하면 암호 해독 된 키가 메모리에 보관됩니다. 서버에 쉘을 넣을 때마다 비밀번호를 다시 입력하지 않기를 원합니다.

먼저 에이전트를 시작하거나 시작된 통신 소켓의 경로를 변수에로드해야합니다. 터미널에서 ssh-agent 를 실행 하면 에이전트 변수를 지정하고 설정하기위한 명령이 생성됩니다. 이 명령들은 다른 터미널에서 사용하기 위해 파일로 저장할 수 있습니다. 또는 이러한 명령을 실행하고 다른 터미널에서 동일한 에이전트를 다시 사용하는 것을 잊어 버릴 수 있습니다. 예 : eval $(ssh-agent).

키를로드하는 ssh-add것은 암호 문구 를 실행 하고 제공 하는 간단한 문제입니다 .

그놈을 사용하는 경우 gnome-keyring-daemon은 일반적으로 ssh-agent와 동일한 SSH 에이전트 기능을 제공하므로 아무것도 시작할 필요가 없습니다. 그놈도 로그인시 키를 자동으로로드 및 잠금 해제합니다.

비밀번호없이 원격 서버에 쉘

모든 것이 올바르게 완료되면을 사용해 도 암호를 묻는 메시지가 표시되지 않습니다. 키가 아닌 에이전트에 문제가있는 경우 사용자 계정의 암호가 아니라 키의 암호 문구를 입력하라는 메시지가 표시됩니다.ssh user@server

통신에 ssh를 사용하는 것은 올바른 키가 에이전트에로드 될 때 사용자 계정 비밀번호를 입력하지 않아도 작동합니다. scp , sftprsync 와 같은 프로그램 이이를 사용합니다.


노트:

  • SSHv1은 매우 안전하지 않으며 이제는 사용되지 않으므로 SSHv2 키만 있으면됩니다.
  • 또한 한 가지 유형의 키만 필요합니다. RSA 또는 DSA이면 충분합니다. (ed25519 및 ECDSA는 모두 최신이므로 모든 곳에서 지원되지 않습니다).
  • 이 모든 단계는 RSA 및 DSA 키에 대해 동일합니다. DSA를 사용 id_dsa하는 경우 대신을 사용하면 id_rsaECDSA에 id_ecdsa.
  • 3.0보다 오래된 OpenSSH 서버가 사용 authorized_keys2되었지만 실제로 5.0보다 오래된 것을 찾을 가능성은 거의 없습니다.
  • 이 지침은 OpenSSH 버전 3.0 이상에만 적용됩니다. lsh, ssh.com및 기타 (Unix 및 not) SSH 서버는이 자습서에 포함되어 있지 않습니다.

예 :

  • 공개 키를 원격 호스트에 복사 :

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost #이
    
    고양이 ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; cat >> ~ / .ssh / authorized_keys '# 또는 이것
    
  • 재사용을위한 에이전트 변수 저장 (예제)
    ssh-agent> ~ / .ssh / 크로스 터미널 에이전트
    . ~ / .ssh / 크로스 터미널 에이전트
    

7
아, "ssh-add {path-to-private-key-file}"이라고 말하면 암호 문구를 묻습니다. 귀하의 게시물에 이것을 더 명확하게하십시오. "Fourth, run ssh"도 추가해야합니다. 이 문서와 관련된 문서의 문제 중 일부는 진행중인 작업을 모르고 프로세스가 어떻게 작동하는지 모르는 프로세스에 익숙하지 않은 사람에게는 명백하지 않은 겉보기 명백한 단계를 극복한다는 것입니다.
Jason S

1
Jason : ssh-add -l은 에이전트가 실행 중인지 확인하는 것입니다. 인수가없는 ssh-add는 기본 위치 (~ / .ssh / id_rsa)에서 키를 추가합니다. 어쨌든 업데이트되었습니다.
grawity

4
ssh-copy-id공개 키를 대상 호스트에 복사하고 권한을 자동으로 설정 하는 명령 이 있습니다.
hasen

1
좋은 답변입니다! 주요 파일의 파일 사용 권한에 관한 내용이 누락되었습니다. 오늘 관련 문제가 있습니다. 개인 키 파일은 본인 만 액세스 할 수 있어야하고 공개 키 파일은 본인 만 쓸 수 있어야합니다.
ripper234

1
하나의 라이너 : ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address(바꾸기 username@server-ip-or-address).
totymedli

22

사용중인 Unix, 연결중인 Unix, 사용중인 쉘, 사용중인 SSH 변형 등을 지정하지 않았습니다. 따라서이 중 일부를 약간 조정해야합니다. 이것은 많은 유닉스 변형에 사용되는 합리적으로 최신 버전의 OpenSSH를 기반으로합니다.

이것은 모두 로컬 데스크톱 시스템에서 가져온 것입니다.

ssh-keygen

키 이름에 기본값을 사용해야합니다. 난 당신이 제안 그렇지 않으면 보안 문제입니다, 그 키에 암호를 설정합니다. "-t rsa"는 나쁜 생각은 아니지만 아마도 필요하지는 않습니다.

ssh-copy-id username@server

그러면 로그인에 사용할 비밀번호를 묻는 메시지가 표시되고 authorized_keys 항목이 설정됩니다. (손으로 할 필요가 없습니다)

그런 다음,

`ssh-agent`

또는 아마도 :

exec ssh-agent sh

또는:

exec ssh-agent bash

그러면 키를 보유 할 수있는 SSH 에이전트가 시작됩니다. 많은 최신 유닉스 변종에서 그래픽으로 로그인하면 이미 발생했을 것입니다. 첫 번째 변형 (백틱 포함)은 ssh-agent를 백그라운드에 넣고 환경 변수를 설정하여 대화합니다. 두 번째는 에이전트가 쉘을 실행하도록하여 쉘을 종료하면 에이전트가 종료됩니다.

많은 최신 Unix 변형에는 특히 그래픽으로 로그인 한 경우 에이전트가 이미 실행 중입니다. " ps aux | grep ssh-agent"또는 " ps -ef | grep ssh-agent"를 시도 할 수 있습니다 . 이미 실행중인 것이 있으면 사용하십시오.

그런 다음 마지막으로

ssh-add

암호를 요구할 것입니다. 당신이 ssh-keygen에게 준 것을 주라. 그래픽으로 요청하는 방법도 있습니다. 그리고 ssh-agent 및 ssh-add 항목을 로그인 스크립트 (사용하는 쉘에 따라 설정이 다름)에 넣어이를 자동화 할 수 있지만 일부 Unix 변형 (예 : 현재 Ubuntu Linux)은 대부분 자동으로 수행하므로 실제로 필요한 것은 키를 만들고 ssh-copy-id를 사용하여 원격 호스트에서 설정하는 것입니다.

이제 " ssh username@server"는 인증을 요구하지 않고 작동합니다. 무대 뒤에서는 ssh-agent가 보유하고있는 키를 사용하여 에이전트에게 마법 서명을 요구합니다.


11

Windows의 PuTTY에서도이 작업을 수행 할 수 있습니다.

퍼블릭 / 프라이빗 키 페어가 설정되면 (여기 다른 답변에서 볼 수 있듯이) PuttyGen을 실행하십시오. 여기에서 이미 설정 한 기존 개인 키를로드 한 다음 PuTTY 개인 키 (ppk)로 저장합니다.

그런 다음 PuTTY에서 자동 로그인하려는 저장된 세션을 클릭하고로드를 클릭하십시오. 여기에서 왼쪽 분할 창의 연결-> 데이터로 이동 한 후 "원격 로그인 사용자 이름"에 해당 원격 서버의 사용자 이름을 입력하십시오.

PuTTY 사용자 이름 입력

그런 다음 Connection-> SSH-> Auth로 이동하여 PuttyGen에서 작성한 ppk를 찾으십시오.

PuTTY 개인 키 입력

그런 다음 세션 페이지로 돌아가서 이전에로드 한 세션을 저장하십시오.


첫 번째 이미지 링크 인 "PuTTY username entry"가 깨져있는 것 같습니다.
Peter Mortensen

2
PuTTY에는 자체 버전의 ssh-agent가 포함되어 있습니다. 그것은 Pageant라고 불립니다. 시스템 트레이에서 실행되며 키를 보관합니다. ssh-agent를 실행할 필요가 없으며 인증 섹션의 PuTTY 옵션에서 "에이전트 전달 허용"을 선택하면 키 에이전트가 사용 가능하도록 Pageant의 연결이 원격으로 전달됩니다.
Kevin Panko

3

ServerFault 에 대한 매우 유사한 질문에서 ssh-copy-id를 사용하는 것이 좋습니다 .이 방법은 인증 키 설정과 관련된 모든 단계를 수행합니다.

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

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

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

당신이해야 할 일은 단순히 이것입니다 :

ssh-copy-id user@host

비밀번호를 한 번 입력하면 계속 사용할 수 있습니다!


3

ssh 키를 설정하는 방법에 대해 이미 말한 것 외에도 Keychainssh-agent 콘솔 프론트 엔드 로 권장합니다. 이를 통해 로그인 대신 시스템 프로세스 당 하나만 처리 할 수 ​​있습니다.

이미 동일한 그놈 및 KDE 도구가 있다는 것을 알고 있지만 콘솔 중독자 유형 이라면 훌륭합니다 (대부분의 유닉스 시스템에서 사용할 수 있음).

그것을 사용하려면 간단히 다음을 추가하십시오 ~/.bashrc(다른 쉘과 유사).

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi

2

http://linuxproblem.org/art_9.html

당신의 목표

Linux 및 OpenSSH를 사용하여 작업을 자동화하려고합니다. 따라서 호스트 A / 사용자 a에서 호스트 B / 사용자로 자동 로그인해야합니다. b. 쉘 스크립트 내에서 ssh를 호출하기 때문에 비밀번호를 입력하고 싶지 않습니다.


1
downvote는 내 것이 아니었지만 다른 사람이 몇 분 전에 거의 비슷한 답변을 게시 한 것을 발견하면 사람들이 답변을 삭제하는 것을 신경 쓰지 않았습니다.
Arjan

2
Arjan : 대부분 귀하의 의견에 동의하지만 게시물이 몇 초만에 분리 될 때 반드시 2 위에있는 사람을 처벌하는 것이 공정하다고 생각하지는 않습니다. 난 당신이 upvoting하여 그들에게 보상해야한다고 말하지는 않지만 downvoting은 정답이 아니라 정답이 아니라는 인상을줍니다
TheTXI

2

REALLY REALLY REALY REALY long tutorials cos 정말 실망스러워서 매우 간단한 튜토리얼을 썼습니다 :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub

2

퍼티 에는 다음 -pw과 같은 바탕 화면에 바로 가기를 만들 수 있는 옵션이 있습니다.

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password

1
  1. 연결 호스트에서을 실행하십시오 ssh-keygen. (유형을 지정하라는 메시지가 표시되면을 수행하십시오 ssh-keygen -t rsa.) 파일 위치를 묻는 메시지가 표시되면 기본값을 사용하십시오. 암호 문구를 물을 때 암호를 입력하지 않으려면 Enter 키를 누르십시오.
  2. cat ~/.ssh/id_rsa.pub(또는 무엇이든 기본 파일 위치에서은 ssh-keygen당신이해야 할 거라고하지만했다 정말 오래된 ssh이 다를 수에 대한 설치); 출력을 클립 보드에 복사하십시오.
  3. 연결하려는 계정으로 대상 호스트에 정상적으로 로그인하십시오. 파일을 편집하십시오 ~/.ssh/authorized_keys( ~/.ssh존재하지 않는 경우 slogin올바른 권한으로 파일을 작성하는 간단하고 쉬운 방법 임). id_rsa.pub다른 호스트 의 클립 보드 를이 파일에 붙여 넣습니다 .

3
암호를 추가하지 말 것을 제안하는 경우 -1입니다. 암호가 없으면 파일을 읽는 사람은 누구나 합법적 인 사용자로 위장 할 수 있습니다.
bortzmeyer

2
먼저 그는 암호를 입력하지 않아도됩니다. 그의 암호 대신 암호를 입력하는 것이 개선 될 것이라고 생각하지 않았습니다. 둘째, 당신은 틀 렸습니다. 그렇기 때문에 공개 키와 개인 키가 있으므로 공개 키가 세계에있을 수 있습니다.
혼돈

문제의 암호는 연결할 때마다가 아니라 키 생성 중에 입력됩니다. 옳은?
Richard Hoskins

암호로 생성 된 키는 키를 사용할 때마다 암호를 입력해야합니다.
혼돈

2
잘못된. ssh-agent (허용 된 답변 참조)를 사용하면 세션 당 한 번만 비밀번호를 입력합니다.
bortzmeyer

0

Linux의 터미널에서 모두 수행하려면 다음을 수행하십시오.

호스트에서

cd ~ / .ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "원하는 경우 일부 주석 텍스트"-f id_ArbitraryName

{}의 항목은 옵션이며 rsa 또는 dsa를 사용하고 비트 크기를 선택하십시오 (더 클수록 더 안전합니다)

그런 다음 authorized_keys 및 certified_keys2 파일에 권한을 추가해야합니다.

cat id_ArbitraryName.pub >> certified_keys

cat id_AribtraryName.pub >> certified_keys2

그런 다음 id_AribtraryName 파일을 ssh하려는 상자에 다운로드하십시오. 연결 박스가 유닉스 기반이라면, 설정 파일이 필요할 수 있습니다 (퍼티에서 위의 누군가가 그것을 덮었습니다).

연결 상자에서

설정 파일에서-vim ~ / .ssh / config

호스트 example.host.com # 또는 컴퓨터 이름

사용자 이름

IdentityFile ~ / .ssh / id_ArbitraryName

구성 파일에는 600의 권한이 필요합니다. SSh 폴더에는 700이 필요합니다.

많은 생략 된 구성 문제가 발생하면 도움이되기를 바랍니다.

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