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

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

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

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

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

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



답변

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

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

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

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


답변

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


답변

현재로 맥 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

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


답변

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의 이전 동작을 모방하고 암호를 기억합니다.


답변

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

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

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


답변

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

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


답변

클라이언트 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 키 체인을 다시 잠그십시오.