SSH 키와 함께 Mac OS X 키 체인을 사용하는 방법은 무엇입니까?


140

Mac OS X Leopard 이후 키 체인은 SSH 키 저장을 지원한다는 것을 알고 있습니다. 누군가이 기능이 어떻게 작동하는지 설명해 주시겠습니까?

다양한 서버에 액세스하기 위해 생성 한 RSA 키가 ~ / .ssh 디렉토리에 저장되어 있습니다. 해당 키에 암호가 설정되어 있지 않습니다. 현재 해당 서버에 로그인하기 위해 터미널에서 다음 명령을 사용합니다.

eval`ssh-agent`
ssh-add ~ / .ssh / some_key_rsa
ssh user @ server

(이를 쉽게하기 위해 Bash 함수를 작성했습니다.)

키 체인을 사용하여 더 좋은 방법이 있습니까?

답변:


16

그것이 작동하려면 $SSH_AUTH_SOCK환경 변수가을 가리켜 야합니다 /tmp/launch-xxxxxx/Listeners. 로그인하면 자동으로 수행됩니다. 해당 소켓의 리스너는 ssh-agent 프로토콜을 말합니다.

bash 스크립트는 자체 ssh 에이전트 ( ssh-agentssh_agent 가 아닌 철자법) ssh-agent를 시작하고 로그인시 설정된 기존 스크립트를 대체합니다 .

또한 키 체인의 요점은 암호를 ssh 키에 저장하는 것입니다.하지만 해당 키에 암호가 설정되어 있지 않다고 말하면 키 체인 통합에서 무엇을 기대하는지 잘 모르겠습니다.

마지막으로 처음 로그인하면 ssh-agent 프로세스가 표시되지 않을 수 있습니다. 해당 프로세스는 처음으로 소켓을 읽으려고 할 때 서비스를 시작하여 자동으로 시작됩니다 /tmp.


1
감사. 따라서 ssh-add로그인시 시작된 기본 ssh 에이전트에 RSA ID를 추가 하려면 계속 실행 해야합니까?
John Topley

ssh-add를 실행할 필요는 없습니다. ssh-agent는 ssh를 처음 실행할 때 키 암호를 묻습니다.
Rudedog

3
ssh를 실행할 때마다 암호를 묻는 메시지가 나타납니다. 요점은 암호를 입력하고 싶지 않다는 것입니다.
John Topley

1
비밀번호를 묻는 메시지가 무엇입니까? 나는 그것이 당신에게 프롬프트하는 원격 서버라고 의심하기 시작했다. 원격 서버에서 비밀번호를 무시하려면 $HOME/.ssh/authorized_keys해당 서버에 공개 키를 추가해야 합니다. Mac OS의 ssh-agent + keychain은 로컬 ssh 키의 암호를 저장하는 데만 사용됩니다. 기존 ssh 연결을 통해 원격 비밀번호를 보내려는 것은 아닙니다.
Rudedog

1
ssh -vssh가 수행하는 작업을 진단하는 데 사용 합니다. 또한 sshd -p 8900 -v서버 측에서 사용 ssh -v remote:8900하고 sshd가 수행하는 작업을 진단합니다.
Rudedog 2009

252

OS X의 Leopard 릴리스부터 ssh-agent는 Keychain과 더 밀접하게 통합되었습니다. 모든 SSH 키의 암호를 키 체인에 안전하게 저장할 수 있습니다. 키 체인은 시작시 ssh-agent가 읽을 수 있습니다. 결론은 암호를 사용하여 키를 보호하는 것이 간단하지만 암호를 입력 할 필요가 없다는 것입니다. 방법은 다음과 같습니다.

각 ssh 키에 암호 문구를 키 체인에 추가하십시오 (옵션 -k는 일반 개인 키만로드하고 인증서는 생략 함)

ssh-add -K [path/to/private SSH key]

(이것은 대문자 K입니다)

Mac을 재부팅 할 때마다 키 체인의 모든 SSH 키가 자동으로로드됩니다. Keychain Access 앱의 키와 명령 줄에서 다음을 통해 키를 볼 수 있어야합니다.

ssh-add -l

ssh-add -l원격으로 연결할 때 ($ DISPLAY가 설정되지 않은) 키가 표시되지 않습니다. 키 체인을 사용하려면 특별한 트릭을 사용해야합니다 (예 : superuser.com/questions/141044/… )
Ether

2
developer.apple.com/library/mac/documentation/Darwin/Reference/… 또한 암호를 키 체인에 저장하려면 -K 옵션이 필요합니다.
Neeme Praks

5
Homebrew와 같은 패키지 시스템을 통해 다른 버전의 SSH를 설치 한 경우와 같은 절대 경로를 사용해야합니다 /usr/bin/ssh-add.
Ludovic Kuty 2012

1
흥미롭게도 macOS Sierra에서는 재부팅 후 비밀번호를 묻지 않고 ssh-add -l"에이전트에 ID가 없습니다"를 반환합니다. ( ps aux포함 /usr/bin/ssh-agent -l).
Halil Özgür

4
macOS Sierra의 경우 상황이 변경되었습니다. 참조 github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
schieferstapel

79

현재로 맥 OS 시에라 , SSH 에이전트 계정에 로그인 할 때 이전에 SSH 키를로드 더 이상 자동으로로드됩니다. 이것은 애플 측에서 의도적 인 것이며, 주류 OpenSSH 구현 과 재조정하기를 원했습니다 . [1]


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

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

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


다음은 더 이상 사용되지 않습니다 (참조 용으로 유지됨).

이전 동작으로 돌아가려면 로그인 할 때 ssh-add -A명령 (키 체인에 암호 문구가있는 모든 ssh 키를 자동으로로드) 을 실행하려고합니다 . 그렇게하려면 다음 단계를 수행하십시오.

  1. 먼저, 명령을 사용하여 자동로드하려는 모든 키를 ssh-agent에 추가 하십시오 ssh-add -K /absolute/path/to/your/private/key/id_rsa. 이 -K인수는 키 패스 문구가 macOS의 키 체인에 추가되도록 합니다. 키의 절대 경로를 사용해야합니다. 상대 경로를 사용하면 자동 실행 스크립트가 키를 찾지 못하게됩니다.

  2. 입력 할 때 모든 키가 추가 된 것으로 표시되어 있는지 확인하십시오 ssh-add -A.

  3. 아래 내용으로 호출 com.yourusername.ssh-add.plist된 파일을 작성하십시오 ~/Library/LaunchAgents/. 이와 같은 Plist 파일launchd로그인 할 때 스크립트를 실행 하는 데 사용됩니다 . [2] [3]

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
      <string>com.user.loginscript</string>
    <key>ProgramArguments</key>
      <array>
        <string>ssh-add</string>
        <string>-A</string>
      </array>
    <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    
  4. 다음 을 실행하여 방금 만든 plist 파일launchd 을로드하도록 지시 하십시오 ..launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist

그리고 당신은 모든 준비가되어 있어야합니다.



33

Ricardo의 답변 보다 10.12 Sierra를 실행하는 Mac의 세션 / 레스토랑간에 암호를 유지 하는 간단한 방법이 있습니다.

  1. ssh-add -K ~/.ssh/id_rsa
    참고 : id_rsa 키가있는 경로를 변경하십시오.
  2. ssh-add -A
  3. 다음 ~/.ssh/config파일을 작성하거나 존재하는 경우 편집 하십시오.

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    이제 다시 시작할 때마다 비밀번호가 기억됩니다!

Apple은이 OpenRadar , Twitter 토론Apple 기술 노트에 언급 된대로 macOS 10.12 Sierra에서 ssh-agent의 동작을 의도적으로 변경하여 더 이상 이전 SSH 키를 자동으로로드하지 않습니다 . 위의 솔루션은 El Capitan의 이전 동작을 모방하고 암호를 기억합니다.


2
굉장하고, 매력처럼 작동하고, 다른 것들보다 훨씬 더 깨끗하고 다른 곳에서 잘 해결하고 올바른 장소에서 해결되었습니다 :)
GerardJP


10

참고 : macOS Sierra의 경우 ChrisJF의 최신 답변을 참조하십시오 .

[Jeff McCarrell의 답변] [2]은 암호 구문을 추가하는 명령에 하이픈 대신에 대시가 포함되어 있다는 것을 제외하고는 그렇습니다 (예 : –K대신 -K) –K: No such file or directory. 읽어야합니다.

ssh-add -K [path/to/private SSH key]

2
이것은 새로운 답변이 아니라 귀하가 참조하는 답변에 대한 의견이어야합니다. 우리는 여기서 보안에 대해 이야기하고 있습니다. 맹목적으로 복사하여 붙여 넣기보다는 신중하게 입력해야한다고 제안 할 수 있습니다.ssh-add -K
Phil_1984_

1
K와 함께 하이픈을 사용하면 얻을 수 illegal option -- K있습니다. 소문자 k가 옵션으로 나열됩니다.
Sam Dutton

피드백 주셔서 감사합니다. 방금 macOS Sierra를 확인했습니다. -K즉, 대시 대문자 K는 여전히 유효합니다
simonair

6

기본 ssh명령을 사용하지 않는 것 같습니다 . 당신은 마 ssh포트를 통해 설치되어 있습니까? 시도 which ssh하는보고 ssh사용하는 명령.

일반적으로 키 체인에 아직 저장되어 있지 않은 경우 암호를 묻는 대화 상자가 표시됩니다.


포트를 사용하지 않습니다.
John Topley

정보 주셔서 감사합니다 :) Homebrew에서 OpenSSH를 사용하고 있었기 때문에 문제가있었습니다.
ggustafsson

6

클라이언트 ssh 인증서를 사용하여 로그인하는 동안 비슷한 문제가 발생했습니다. 이 특정 경우에는 git 저장소에 액세스하기위한 것입니다. 이것은 상황이었습니다.

  • 키가 저장되었습니다 ~/.ssh/
  • 개인 키에는 암호가 있습니다.
  • 암호는 OS X 로그인 키 체인에 저장됩니다. ~/Library/Keychains/login.keychain
  • 연결은 다음과 같습니다. 내 mac ->원격 mac ->git / ssh 서버
  • 맥 OS X 10.8.5

원격 데스크톱을 사용하여 원격 Mac에 연결했을 때 문제가 없었습니다. 그러나 SSH를 사용하여 원격 Mac에 연결할 때마다 매번 ssh 암호 문구를 요청했습니다. 다음 단계는 나를 위해 해결했습니다.

  1. security unlock-keychain비밀번호 문구는 로그인 키 체인에 저장됩니다. 그러면 잠금이 해제되고 ssh-agent가 액세스 할 수 있습니다.
  2. eval `ssh-agent -s`쉘 사용을 위해 ssh-agent를 시작합니다. 키 체인에서 암호를 얻어 개인 ssh 키의 잠금을 해제하는 데 사용합니다.
  3. ssh / git 연결을 설정하고 작업을 수행하십시오.
  4. eval `ssh-agent -k` 실행중인 ssh-agent를 종료하십시오.
  5. security lock-keychain 키 체인을 다시 잠그십시오.

1
별명에서 나를 위해 작동하는 # 2 위해서는, 내가 사용했다 eval \$(ssh-agent)원격 로그인 및 키 체인 : 다시 . 하지 않을 때는 별칭 내 eval $(ssh-agent)작품 ( 백 슬래시 $없이 ).
트래비스

4

또한보십시오:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

... 더 자세한 정보가 요청되면이 메모를 추가하십시오. "security"명령은 키 (및 기타)를 키 체인으로 직접 가져올 수 있습니다. 좋은 점은 ssh-add와 달리 키 체인을 지정할 수 있다는 것입니다. 이를 통해 시스템 키 체인으로 직접 가져올 수 있습니다 ( "사람 보안"방법을 배우기 위해)


1
이 답변을 좀 더 자세히 설명해 주시겠습니까? 감사.
Matthew Williams

1

MacOS 10.12.2부터 최고의 Apple 전용 솔루션 이 여기에 설명되어 있습니다.

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

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


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

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