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-agent
ssh_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 이후 권장되는 방법입니다 .
-
~/.ssh/config
파일에 다음 줄을 추가 하십시오.Host * UseKeychain yes AddKeysToAgent yes
-
명령을 사용하여 ssh-agent에 추가 한 모든 키
ssh-add /path/to/your/private/key/id_rsa
는 자동으로 키 체인에 추가되며 재부팅시 자동로드되어야합니다.
다음은 더 이상 사용되지 않습니다 (참조 용으로 유지됨).
이전 동작으로 돌아가려면 로그인 할 때 ssh-add -A
명령 (키 체인에 암호 문구가있는 모든 ssh 키를 자동으로로드) 을 실행하려고합니다 . 그렇게하려면 다음 단계를 수행하십시오.
-
먼저, 명령을 사용하여 자동로드하려는 모든 키를 ssh-agent에 추가 하십시오
ssh-add -K /absolute/path/to/your/private/key/id_rsa
. 이-K
인수는 키 패스 문구가 macOS의 키 체인에 추가되도록 합니다. 키의 절대 경로를 사용해야합니다. 상대 경로를 사용하면 자동 실행 스크립트가 키를 찾지 못하게됩니다. -
입력 할 때 모든 키가 추가 된 것으로 표시되어 있는지 확인하십시오
ssh-add -A
. -
아래 내용으로 호출
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>
-
다음 을 실행하여 방금 만든 plist 파일
launchd
을로드하도록 지시 하십시오 ..launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist
그리고 당신은 모든 준비가되어 있어야합니다.
답변
Ricardo의 답변 보다 10.12 Sierra를 실행하는 Mac의 세션 / 레스토랑간에 암호를 유지 하는 간단한 방법이 있습니다.
ssh-add -K ~/.ssh/id_rsa
참고 : id_rsa 키가있는 경로를 변경하십시오.ssh-add -A
-
다음
~/.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 암호 문구를 요청했습니다. 다음 단계는 나를 위해 해결했습니다.
security unlock-keychain
비밀번호 문구는 로그인 키 체인에 저장됩니다. 그러면 잠금이 해제되고 ssh-agent가 액세스 할 수 있습니다.eval `ssh-agent -s`
쉘 사용을 위해 ssh-agent를 시작합니다. 키 체인에서 암호를 얻어 개인 ssh 키의 잠금을 해제하는 데 사용합니다.- ssh / git 연결을 설정하고 작업을 수행하십시오.
eval `ssh-agent -k`
실행중인 ssh-agent를 종료하십시오.security lock-keychain
키 체인을 다시 잠그십시오.