Mac OS X Lion을 사용하고 매일 SSH를 통해 원격 호스트에 로그인합니다. 원격 인증을 위해 SSH 키 페어를 사용하고 모든 호스트의 로그인 문구를 자동화 할 필요는 없지만 터미널이 내 SSH 개인 키에 액세스하기 위해 암호를 요구하는 것은 여전히 성가신 일입니다.
보안상의 이유로 SSH 개인 키에 액세스하기위한 암호가 필요하다고 생각합니다. 터미널이 시작시 정확히 한 번만 문구를 요구하고 암기하고 나중에 SSH 세션에서 개인 키를 자동으로 사용하는 방법이 있습니까?
keychain
젠투 리눅스에서 잘 작동 하는 스크립트가 있습니다 . 그러나 나는 Mac OS X Lion에서 결코 알아 내지 못했습니다. 무엇보다, 같은 많은 협박 측면이있다 ssh-agent
, ssh-add
. SSH 툴킷에 대한 다양한 자료를 읽고 좌절 한 실험을 한 후에 더 혼란스러워졌습니다.
따라서 다음 질문에 대한 조언을 찾고 StackExchange에 왔습니다.
- 무엇
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
그들이 어떻게 상호 작용 서로? - 로그인시 SSH 개인 키 암호를 입력하고 나중에 SSH 세션 생성시 자유롭게 사용할 수 있습니까?
- 어 … 무슨 일이야
Keychain Access.app
? 이전처럼 SSH 구문을 저장하지 않습니다.
여기에 내가 한 일을 열거합니다. 희망적으로 내가 놓친 단계에 대한 단서가 있습니다.
1 단계. 내 Mac에서 SSH 키 페어를 만듭니다.
$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.
2 단계. SSH 공개 키를 원격 호스트에 복사합니다. 예를 들어, 로컬 호스트 Mac에 키를 복사합니다.
$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase
단계 3. 그런 다음 SSH 키 쌍 인증을 통해 원격 호스트 (여기서는 localhost)에 연결하십시오.
$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa':
# Enter my SSH passphrase, not the login password.
단계 4. 원격 호스트에서 로그 아웃 한 후 다시 연결하십시오. 젠장, 터미널은 SSH 문구를 다시 요청합니다.
자주 묻는 질문은 “ssh-agent가 Mac에서 제대로 작동합니까?”입니다. 솔직히 말해서, 나는 이것들에 무슨 일이 일어나고 있는지 전혀 모른다. 다음은 실행 결과를 보여줍니다.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ?? 0:00.03 ssh-agent
26899 ?? 0:00.02 ssh-agent
모든 의견을 환영합니다. 감사!
답변
ssh-agent
그것은 당신이 요구하는 것과 정확히 일치하기 때문에 당신이 일하고 싶은 부분입니다. 에이전트는 데몬으로 실행되며 개인 키를 “추가”하면 해당 키를 기억 sshd
하여 초기 연결 중에 자동으로 원격에 키를 제공합니다 . ( ssh-add
단순히 개인 키를 수동으로 추가하기 위해 실행하는 명령입니다 ssh-agent
).
OS X에서는 Leopard를 기준으로 ssh-agent
또는 ssh-add
수동으로 실행할 필요가 없습니다 . 서버에 연결하려고 할 때 “그냥 발생”해야합니다. 키마다 한 번씩 UI 비밀번호 대화 상자가 표시됩니다.이 대화 상자는 다른 것들 중에서도 키를 자동으로 추가하여 ssh-agent
다시 프롬프트를 표시하지 않습니다.
이것은 소켓에서 launchd
연결을 수신 하는 구성으로 처리되며 처음 필요할 때 $SSH_AUTH_SOCK
자동으로 실행 ssh-agent
됩니다. 그런 다음 ssh-agent
새 키를 열어야 할 때만 자격 증명을 입력하라는 메시지가 표시됩니다.
그래도 작동하지 않으면 올바른 launchd
구성 파일 이 있는지 확인하십시오 .
/System/Library/LaunchAgents/org.openbsd.ssh-agent.plist
어떤 이유로 든 여전히 작동하지 않는 경우 직접 실행하는 “오래된”방법은 다음과 같습니다.
http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html
Leopard가 나온 이후로 사용을 중단했지만 기본적으로 이전 버전의 Mac OS X에서 동일한 작업을 수행 한이 응용 프로그램이 있습니다.
답변
은 “문제”를 해결하는 과정에서, 나는 몇 가지 관련 주제를 봤 및 방법에 대한 몇 가지 메모 적어 한 ssh-agent
, ssh-add
, keychain
, KeyChain Access.app
일을. 결국이 문제는 전혀 문제가 아니라 대신 문제가 나에 관한 것이므로 소위 ssh-login-without-asing-passing-passphrase-every-time 은 Mac에서 기본적으로 완벽하게 작동합니다.
그러나이 과정을 통해 경험을 얻을 수 있습니다. 나는 누군가가 그 용어에 대해 혼란을 느끼도록 돕기 위해 여기에 메모를 작성합니다.
두 가지 비밀번호 조건 :
passphrase
SSH 개인 키에 액세스 할 때 필요한 문구를 나타냅니다.password
Mac에 로그인하는 데 필요한 문구를 나타냅니다.
지금은 이러한 툴킷은 무엇을 알아낼 수, 즉, ssh-agent
, ssh-add
, keychain
, Keychain Access.app
Mac에서.
ssh-agent
SSH 암호를 입력하지 않고 SSH 개인 키를 사용할 수 있도록하는 중요한 서비스입니다.ssh-agent
이런 식으로 작동합니다. 먼저 SSH 개인 키를 주 메모리에 저장하거나 캐시 합니다. 그런 다음 나중에이 세션에서 SSH 개인 SSH 키가 원격 인증에 필요할 때ssh-agent
기본 메모리에서 개인 키를 찾아 원격 프로세스에 전달합니다. SSH 암호를 입력하라는 요청은 개인 키가ssh-agent
처음에 추가 될 때뿐입니다 .ssh-add
ssh-agent
에서 SSH 키를 관리하는 데 도움이되는 컬렉션의 일부입니다ssh-agent
.ssh-add
ssh-agent의 키링에서 개인 키를 나열, 추가, 제거하기 위해 명령을 사용 합니다. 그런 다음 서비스ssh-add
와 통신ssh-agent
하여 작업을 수행합니다.keychain
ssh-agent
서비스 를 찾고 (없는 경우 새 서비스를 시작)ssh-add
SSH 개인 키를 추가 하기위한 스크립트 입니다.keychain
ssh-agent가 일반적으로 자동으로 시작되지 않는 Linux에서 잘 작동하는 간단하고 간단한 아이디어가 있습니다.Keychain Access.app
가장 복잡한 구성 요소 인 것 같습니다. Mac OS X의 범용 토큰 스토리지 서비스입니다. 암호, 인증서 등과 같은 다양한 토큰을 저장하고 토큰 을 요청하는 앱 의 토큰 에이전트 역할을합니다 . SSH 개인 키의 경우 먼저 SSH 개인 키에 대한 액세스 요청을 파악하고 일종의 토큰 인 SSH 암호를Keychain Access.app
키링 에 저장하라는 창을 팝업으로 표시합니다 . 다음에 인증을 위해 개인 키를 사용할Keychain Access.app
때는 권한 부여 여부를 묻는 창이 나타납니다. 큰 대답을 얻은 후에keychain Access.app
개인 키를ssh-agent
의 저장소에 추가합니다 .
두 가지주의를 기울여야합니다.
- Mac OS X Lion
ssh-agent
은 시동시 자동으로 서비스를 시작하고 아래의 소켓에서 청취합니다/tmp
. Keychain Access.app
SSH 암호 문구를 저장하므로ssh-agent
방해받지 않고 개인 키를 추가 할 수 있습니다 . 예. SSH 문구를 입력 할 필요는 없지만이 항목을 처음 만들 때 권한을 부여하려면 Mac 계정의 로그인 암호를 입력해야합니다.
요약하자면, SSH-login-without-asking-passphrase는 Mac OS X에서 기본적으로 작동합니다.
답변
여기에 다른 솔루션이 사람들에게 적합하지 않은 경우 다음이 저에게 효과적이었습니다.
~ / .ssh 디렉토리에있는 모든 개인 키마다 해당하는 공개 키가 있는지 확인하십시오. 공개 키의 이름은 개인 키와 정확히 동일하지만 .pub
끝에 있어야합니다. 적절한 공개 키가 이미 있으면 다시 생성하십시오.
공개 키를 다시 작성해야하는 경우 쉽게 수행 할 수 있습니다.
ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub
my_key
당신의 키가 무엇이든 대체 합니다.
그 후, MacOS는 키 체인의 키 암호 문구를 기억합니다.
참고-암호를 입력하고 키 체인을 저장하는 것은 이제 한 번만 수행하는 작업 (OP가 원하는대로 로그인 세션 당 한 번이 아님)이지만 문제의 mac에 대한 로그인이 암호로 보호되어 있다고 가정하면 암호는 해당 암호로 보호됩니다. 또한이 솔루션은 나에게 이해가되지 않습니다 … 개인 키 외에도 공개 키가 필요하지 않지만 어떤 이유로 MacOSX에 필요합니다.
(원래의 대답 애플 스택 거래소에 비슷한 질문에)
답변
~/.ssh
폴더 구성과 관련하여 거의 언급하지 않은 것은 디렉토리 권한을 제한하는 것입니다.
난 항상에 사용자의 홈 디렉토리 권한을 설정했다 한 암호를 묻는 피하기 위해 SSH를 사용하려면 700
, 그리고 ~/.ssh
에 폴더 권한 700
뿐만 아니라.
그렇지 않으면 모든 키가 올바르게 생성되고 복사 된 경우에도 계속 암호를 묻습니다. 인증 로그에 오류 메시지가 생성되지만 최종 사용자에게는 보이지 않습니다.
답변
시도 할 수있는 또 다른 것은와 ssh-copy-id
같은 것으로 대체되었을 것 k="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"
입니다.
답변
이 답변은이 질문에 대한 해결책이 아닙니다. 그러나 그것은 매우 가깝습니다 (내 문제에 대한 해결책을 찾는 동안이 질문에 끝났습니다).
또한이 질문에 설명 된 것처럼 Mac의 원격 서버에 많은 SSH를 수행하지만 Keychain Access.app
앱은 키 구문을 저장했으며 SSH 서버에서 인증하기 위해 키가 필요할 때마다 입력 할 필요가 없습니다.
그러나 Mac에서 SSH 서버를 활성화하여 원격으로 연결할 수 있습니다. 내 Mac에 원격으로 로그온하면 다른 호스트를 SSH로 할 때 항상 키 문구가 표시됩니다.
키 프레이즈를 현재 세션에 저장할 수 있는 솔루션 을 찾았습니다 . 나는 이것이 누군가에게 유용 할 수 있다고 생각했기 때문에이 게시물 / 답변.
답변
나는이 문제에 당황했다. ssh는 Apple 부서를 제외한 모든 부서에서 작동합니다 (MacBooks 또는 iMac은 중요하지 않습니다). 나는 마침내 암호를 입력하는 데 지 쳤고 이것을 디버깅하기로 결정했습니다.
공유 환경 설정 패널에서 iMac으로 이동하여 sshd를 비활성화했습니다. 그런 다음 루트로 su’ed하고 디버그 모드에서 sshd를 시작하기 위해 “/ usr / sbin / sshd -d”를 입력했습니다. 그런 다음 해당 시스템에 ssh를 시도하고 프로토콜 2를 즉시 사용하려고 시도했는데 프로토콜 2는 모든 것이 잘 사용되는 것처럼 보이지만 sshd는 “authorized_keys”를 찾을 수 없다고 즉시보고했습니다. 나는 모든 리눅스, 솔라리스, 당신 이름-유닉스 박스가 잘 받아 들여지는 Authorized_keys2 파일을 가지고 있었다. certified_keys2를 authorized_keys 및 BOOM에 복사했습니다. 완벽하게 작동합니다.
* keys2가 아닌 * keys를 알 수없는 이유는 무엇입니까? 특히 os x가 known_hosts2에 매우 만족할 때.
어쨌든 이제 우리의 모든 사과 상자에 로그인하거나 암호를 입력하지 않고 원격 명령을 실행할 수 있습니다 : 프롬프트 …