macOS Sierra가 재부팅 사이에 SSH 키를 기억하지 않는 것 같습니다


184

macOS로 업그레이드 한 후이 명령을 실행해야합니다.

ssh-add -K

재부팅 후 문제를 해결하지만 컴퓨터에 로그온 할 때마다이 명령을 실행해야합니다.

위의 명령을 실행하지 않으면 내 키를 ~/.ssh건너 뛰고 연결을 설정하기 위해 서버 비밀번호를 묻는 메시지가 표시됩니다.


1
$ ssh-add -K제공ssh-add: illegal option -- K
modius

1
다음에 개인 키 경로를 입력해야합니다 -K. 해결 방법은 @JakeGould의 답변을 참조하십시오.
bisherbas

10.12.2 업데이트로 인해 불필요한 서버 비밀번호 요청이 제거되었습니다. 더 이상 ssh-add -K를 실행할 필요가 없습니다.
Wayfaring Stranger

답변:


215

macOS Sierra 10.12.2부터 Apple 은 문제에 대한 '적절한'해결을 허용 하는 ssh_config옵션을 추가했습니다 UseKeychain. ~/.ssh/config파일에 다음을 추가 하십시오.

Host *
   AddKeysToAgent yes
   UseKeychain yes     

ssh_config man10.12.2 의 페이지에서 :

키 체인 사용

macOS에서 특정 키를 사용하려고 할 때 시스템이 사용자 키 체인에서 암호를 검색해야하는지 여부를 지정합니다. 사용자가 암호를 제공 할 때이 옵션은 암호가 올바른 것으로 확인되면 암호를 키 체인에 저장해야하는지 여부도 지정합니다. 인수는 'yes'또는 'no'여야합니다. 기본값은 '아니오'입니다.


2
이 링크에 따르면 : openradar.appspot.com/27348363 Apple은 "이 영역에서 주류 OpenSSH와의 동작을 재조정했습니다".
ThomasW

15
애플이 대다수의 개발자들에게 문제를 야기하는 방식으로 행동을 수정 한 것은 터무니없는 일입니다 (GitHub는 다른 것이 없다면 푸시하지 않기 때문에).
mluisbrown

9
나는 이것이 IdentityFile ~/.ssh/id_rsa중복적이고 필요하지 않다고 생각한다 (기본 옵션을 볼 때). 내 ssh 구성 파일에서 해당 옵션을 설정하지 않았습니다.
therealmarv

9
@JakeGould IMO 변경 ~/.ssh/config~ssh레벨 의 문제를 해결하기 때문에 선호됩니다 . .bash_profile셸을 사용하지 않고 ssh를 사용하는 GUI 클라이언트 에서 mod가 작동 하는지 100 % 확신 할 수 없습니다.
mluisbrown

7
Apple 은 그러한 변경에 관한 기술 노트 TN2449 를 발표했습니다 .
Kentzo

106

Capistrano 사용하여 일부 코드를 배포하려고 할 때도이 문제가 발생했습니다 . 매우 실망 스럽습니다. 이 문제를 해결하기 위해 내가 아는 두 가지 방법이 있습니다.

방법 1 : 알려진 모든 키를 SSH 에이전트에 추가하십시오 .

내가 찾은 한 가지 해결책은 다음 ssh-add-A같이 키 체인에 저장된 암호를 사용하여 SSH 에이전트에 알려진 모든 ID를 추가 하는 옵션 으로 실행 하는 것입니다.

ssh-add -A

이제는 작동하지만 재부팅해도 지속되지 않습니다. 따라서 다시 걱정하지 않으려면 다음 ~/.bash_profile과 같이 사용자 파일을여십시오.

nano ~/.bash_profile

그리고 아래에이 줄을 추가하십시오 :

ssh-add -A 2>/dev/null;

이제 새로운 터미널 창을 열면 모든 것이 좋을 것입니다!

방법 2 : 키 체인 에있는 SSH 키만 에이전트에 추가하십시오.

따라서 ssh-add -A가장 기본적인 경우 에는 옵션이 작동하지만 최근에 가장 일반적인 시스템 위에 6-7 Vagrant 상자 (액세스에 SSH 키 / ID를 사용하는)가 설치된 문제 id_rsa.pub가 발생했습니다.

간단히 말해, 서버 액세스는 비밀번호를 기반으로하고 SSH 키 / 아이덴티티는 SSH 키 / 아이덴티티이므로 SSH 키 / 아이덴티티를 기반으로 너무 많은 실패한 시도로 인해 원격 서버에서 잠겼습니다. 그래서 SSH 에이전트는 모든 SSH 키를 시도했지만 실패했으며 암호 프롬프트를 볼 수 없었습니다.

문제는 ssh-add -A필요하지 않더라도 에이전트에 필요한 모든 단일 SSH 키 / 아이덴티티를 임의로 추가 한다는 것입니다. 방랑 상자의 경우와 같이.

많은 테스트 후 내 솔루션은 다음과 같습니다.

먼저, 필요한 것보다 많은 SSH 키 / 아이덴티티를 에이전트에 추가 ssh-add -l한 경우 다음 과 같이 에이전트에서 모두 제거하십시오.

ssh-add -D

그런 다음 SSH 에이전트를 백그라운드 프로세스로 시작하십시오.

eval "$(ssh-agent -s)"

이제 이상 해져서 왜 그런지 잘 모르겠습니다. 경우에 따라 다음 ~/.ssh/id_rsa과 같이 에이전트에 키 / ID를 구체적으로 추가 할 수 있습니다 .

ssh-add ~/.ssh/id_rsa

암호를 입력하고 맞으면 Return가십시오.

그러나 다른 경우에는 단순히 이것을 실행하면 키 / 아이덴티티를 추가하기에 충분합니다.

ssh-add -K

모두 제대로 작동하면 입력하고 ssh-add -l하나의 고독한 SSH 키 / 아이덴티티가 표시되어야합니다.

문제 없다? 이제 당신의 .bash_profile:

nano ~/.bash_profile

그리고이 줄을 맨 아래에 추가하십시오. 해당 -A버전이있는 경우 주석을 달거나 버전을 제거하십시오 .

ssh-add -K 2>/dev/null;

이렇게하면 시작 / 재부팅 할 때마다 SSH 키 / 아이덴티티를 SSH 에이전트로 다시로드 할 수 있습니다.

업데이트 : Apple은 이제 UseKeychain열린 SSH 구성 옵션에 옵션을 추가 ssh-add -A했으며 솔루션도 고려 합니다.

macOS Sierra 10.12.2부터 Apple은UseKeychain SSH 구성을위한 구성 옵션추가했습니다 . 을 통해 매뉴얼 페이지를 확인하면 man ssh_config다음 정보가 표시됩니다.

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

중 하나를 추가로 애플이 솔루션을보고 아래로 비등하는 ssh-add -A.bash_profile 이 열기 레이더 티켓에 설명 된대로 또는 추가 UseKeychain사용자 당에있는 옵션 중 하나 ~/.ssh/config.


4
@modius : 비밀번호로 보호 된 키가 ssh-add -K [path to key]있으면 프롬프트가 표시되면 비밀번호를 입력하고 입력하십시오. Keychain은 암호를 저장하고 ssh-add는 그 후에 암호를 얻습니다.
Timo

2
-A는 키 체인에 저장된 암호를 사용하여 에이전트에 ID를 추가하기위한 것입니다. 암호가없는 아이디가 추가로있는 경우 -A 옵션을 생략하여 에이전트에 추가해야합니다.
Evan Pon 2016 년

12
이에 대한 가시성을 높이기 위해 Apple은 ssh_config 매뉴얼 페이지를 업데이트하여 ssh_config에서 키 를 포함 UseKeychain하고 AddKeysToAgent자동으로 추가했습니다. 쉘 스크립팅이 필요하지 않습니다. 10.12.2에 대한 업데이트 된 정보는 아래 @mluisbrown 답변을 참조하십시오.
Ryan Gibbons

1
@JakeGould 나는 당신이 말하는 것을 얻을 수 있습니다. 나는 실제로 그들이하는 일을 좋아합니다. 암호를 키 체인에 자동으로 저장하고 부팅시로드하는 대신 보안을 제어 할 수 있습니다. / shrug
Ryan Gibbons

1
@RyanGibbons FWIW가에서 공식 제안을보고 애플의 개발자 관계 OpenRadar에이 대답 : "당신은 실행하여 아주 쉽게이 문제를 해결할 수 있습니다 ssh-add -A당신은 당신의 열쇠는 항상로드 할 할 경우 rc 스크립트에." ¯\_(ツ)_/¯
JakeGould

16

여기 에 설명 된대로 , macOS 10.12.2 이후 권장되는 방법입니다 .

  1. ~/.ssh/config파일에 다음 줄을 추가 하십시오.

    Host *
        UseKeychain yes
        AddKeysToAgent yes
  2. 명령을 사용하여 ssh-agent에 추가 한 모든 키 ssh-add /path/to/your/private/key/id_rsa는 자동으로 키 체인에 추가되며 재부팅시 자동로드되어야합니다.


다음과 같은 이유로이 답변을 추가하고 있습니다.

  • 다른 답변에 따르면 IdentityFile ~/.ssh/id_rsa줄 을 추가하라는 메시지가 표시 되지만 키를 자동로드하는 데 해당 옵션이 필요하지 않습니다 (실제로 다른 키를 사용하는 경우 원하지 않는 호스트 섹션의 특정 키를 바인딩합니다) 다른 핫).
  • 수락 된 답변은을 언급 UseKeychain하지만 ssh-agent재부팅 후 키를 유지하기에는 충분하지 않습니다 .

1
두 번째 요점에 관해서. 당신은 얼마나 확신합니까? 재부팅시 실제로는 아무 것도 일어나지 않으며 참조 자료에도 언급되어 있지 않습니다. 위의 구성에서 일어나는 일은 SSH 클라이언트가 첫 번째 연결시 에이전트 키를로드하고 키 체인에서 암호를 가져 오는 경우 키가로드 된 상태로 유지된다는 것입니다. 재부팅 후 바로 키를 나열하여이 명령문을 확인할 수 있으며 ssh-add -L보고 The agent has no identities합니다. 연결하기 전까지는 아무것도 없습니다. 은 AddKeysToAgent어떤 방식으로 재부팅 사이의 키를 유지하지 않습니다!
Danila Vershinin

15

도움이 될만한 이 주제에 대한 간단한 게시물을 작성 했습니다 .

솔루션은 ssh-add -A모든 시작시 명령을 호출 합니다.

그냥 추가 .plist경로에 다음과 같은 내용으로 파일 ~/Library/LaunchAgents/이나 하나 만들 Lingon의 응용 프로그램을 :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>ssh-add-a</string>
    <key>ProgramArguments</key>
    <array>
        <string>ssh-add</string>
        <string>-A</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

<!-- @@@@LingonWhatStart:ssh-add -A@@@@LingonWhatEnd -->

8

macOS 10.12.2부터는 UseKeychain옵션을 사용할 수 있습니다 . 자세한 내용은 여기 읽기 또는 조사 man ssh_config.

     UseKeychain
         On macOS, specifies whether the system should search for passphrases in the user's keychain
         when attempting to use a particular key. When the passphrase is provided by the user, this
         option also specifies whether the passphrase should be stored into the keychain once it has
         been verified to be correct.  The argument must be ``yes'' or ``no''.  The default is ``no''.

따라서 다음을 수행하십시오.

echo "UseKeychain yes" >> ~/.ssh/config


1
>>명령을 여러 번 입력하면 사용 이 위험합니다. mluisbrown answer 또는 ChrisJF answer에 설명 된대로 파일을 수동으로 편집하는 것이 좋습니다 .
Cœur

당신은 바로 거기에 :-)

4

나는 그것이 ssh-add -K" 불법 옵션-K " 를 주었다는 것을 알았다 . ssh-add가 / usr / local / bin (brew에 의해 설치 되었습니까?)에서 나오는 이상한 버전 이었기 때문입니다. / usr / bin에있는 ssh-add를 사용하여 키를 추가 할 수있었습니다.

/usr/bin/ssh-add -K ~/.ssh/id_rsa

이것은 오랜 세월 동안 쉽게 일하지 못한 후 저에게 일한 것입니다.
Nyxee

4

나는 전에이 문제가 있었고 이것을 우회 할 수있는 방법을 찾았습니다. 난 그냥라는 파일을 만들어 config내에서 ~/.ssh나는 다음과 같은 라인을 추가 한 폴더를 :

Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes

그 이유를 잘 모르겠지만, Host그리고 HostName둘 다 중요하다. 제 경우에는 그들 중 하나가 존재하지 않으면 해결책이 작동하지 않았습니다.

그런 다음 방금 시작했는데 ssh-add -K다시 시작한 후에도 작동했습니다.


1
Host는 특정 서버에 대한 사용자 정의 이름 / 별명이며 서버 당 항목을 구분합니다. HostName은 github.com과 같은 서버의 네트워크 주소 지정 가능 이름을 나타내지 만 IP 주소도 사용할 수 있습니다. Host와 HostName은 같을 필요는 없지만 ssh 구성 형식의 필수 요소입니다.
Mark Fox

4

다른 버전의 ssh (예 : homebrew를 통해 설치)를 사용하는 경우 위의 솔루션이 기본적으로 작동하지 않습니다. 예를 들어, AddKeysToAgent yesUseKeychain yes.ssh/config파일이 아닌 애플 SSH 버전 인식되지 않고 오류가 발생합니다. 클라이언트 의 -A또는 -K옵션 과 동일합니다 ssh.

@mluisbrown 의 답변이 전혀 작동하지 않음을 의미 합니다. @JakeGould 의 답변 1 방법을 사용하고 macOS ssh-add유틸리티를 명시 적으로 사용하여 .bash_profile키 체인에 모든 키를 추가하십시오.

/usr/bin/ssh-add -A

주석에서 언급했듯이 먼저 키 체인에 키를 추가해야 할 수도 있습니다. 예 :/usr/bin/ssh-add -K .ssh/github


2

모든 호스트에 UseKeyChain을 추가하기 위해 ~ / .ssh / config를 수정하면 반복되는 악몽을 막을 수 있습니다.)

Host *
 UseKeychain yes

파일이 비어 있거나 존재하지 않는 경우 위의 구성을 작성 및 / 또는 추가하십시오.


1

Mac OS X Sierra (10.12.6)로 업데이트했습니다. 다른 호스트로 ssh 할 수는 있지만 github.com으로는 ssh 할 수 없습니다.

이것은 ~ / .ssh / config에 삽입 해야하는 것입니다.

PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa

그 변경 후, 나는 이전처럼 github을 사용할 수 있습니다.

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