Mac OS X Lion에서 SSH 암호를 입력하지 않고 SSH 개인 키를 사용하여 로그인하는 방법은 무엇입니까?


23

Mac OS X Lion을 사용하고 매일 SSH를 통해 원격 호스트에 로그인합니다. 원격 인증을 위해 SSH 키 페어를 사용하고 모든 호스트의 로그인 문구를 자동화 할 필요는 없지만 터미널이 내 SSH 개인 키에 액세스하기 위해 암호를 요구하는 것은 여전히 ​​성가신 일입니다.

보안상의 이유로 SSH 개인 키에 액세스하기위한 암호가 필요하다고 생각합니다. 터미널이 시작시 정확히 한 번만 문구를 요구하고 암기하고 나중에 SSH 세션에서 개인 키를 자동으로 사용하는 방법이 있습니까?

keychain젠투 리눅스에서 잘 작동 하는 스크립트가 있습니다 . 그러나 나는 Mac OS X Lion에서 결코 알아 내지 못했습니다. 무엇보다, 같은 많은 협박 측면이있다 ssh-agent, ssh-add. SSH 툴킷에 대한 다양한 자료를 읽고 좌절 한 실험을 한 후에 더 혼란스러워졌습니다.

따라서 다음 질문에 대한 조언을 찾고 StackExchange에 왔습니다.

  1. 무엇 ssh-agent, ssh-add, keychain, Keychain Access.app그들이 어떻게 상호 작용 서로?
  2. 로그인시 SSH 개인 키 암호를 입력하고 나중에 SSH 세션 생성시 자유롭게 사용할 수 있습니까?
  3. 어 ... 무슨 일이야 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

모든 의견을 환영합니다. 감사!


관련 . 사용 사례에 맞게 승인 된 답변을 조정할 수 있습니다.
Daniel Beck

답변:


12

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에서 동일한 작업을 수행 한이 응용 프로그램이 있습니다.

http://www.sshkeychain.org/


4
감사합니다, 마이클 에덴 필드 나는 무엇이 잘못되고 있는지 알아 냈고 이제 ssh-login-with-pass-passphrase는 Mac OS X Lion에서 완벽하게 작동합니다. 나는 바보 같은 일을했다-나는 2 시간마다 청소하기 위해 cron 작업을 ~/tmp가리키고 /tmp/실행 하는 심볼릭 링크를 만들었고 ~/tmpssh-agent 소켓도 제거했다. 오, 나 자신이 싫어.
Jianwen W.

13

은 "문제"를 해결하는 과정에서, 나는 몇 가지 관련 주제를 봤 및 방법에 대한 몇 가지 메모 적어 한 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.appMac에서.

  • ssh-agentSSH 암호를 입력하지 않고 SSH 개인 키를 사용할 수 있도록하는 중요한 서비스입니다. ssh-agent이런 식으로 작동합니다. 먼저 SSH 개인 키를 주 메모리에 저장하거나 캐시 합니다. 그런 다음 나중에이 세션에서 SSH 개인 SSH 키가 원격 인증에 필요할 때 ssh-agent기본 메모리에서 개인 키를 찾아 원격 프로세스에 전달합니다. SSH 암호를 입력하라는 요청은 개인 키가 ssh-agent처음에 추가 될 때뿐입니다 .
  • ssh-addssh-agent에서 SSH 키를 관리하는 데 도움이되는 컬렉션의 일부입니다 ssh-agent. ssh-addssh-agent의 키링에서 개인 키를 나열, 추가, 제거하기 위해 명령을 사용 합니다. 그런 다음 서비스 ssh-add와 통신 ssh-agent하여 작업을 수행합니다.
  • keychainssh-agent서비스 를 찾고 (없는 경우 새 서비스를 시작) ssh-addSSH 개인 키를 추가 하기위한 스크립트 입니다. keychainssh-agent가 일반적으로 자동으로 시작되지 않는 Linux에서 잘 작동하는 간단하고 간단한 아이디어가 있습니다.
  • Keychain Access.app가장 복잡한 구성 요소 인 것 같습니다. Mac OS X의 범용 토큰 스토리지 서비스입니다. 암호, 인증서 등과 같은 다양한 토큰을 저장하고 토큰 을 요청하는 앱 의 토큰 에이전트 역할을합니다 . SSH 개인 키의 경우 먼저 SSH 개인 키에 대한 액세스 요청을 파악하고 일종의 토큰 인 SSH 암호를 Keychain Access.app키링 에 저장하라는 창을 팝업으로 표시합니다 . 다음에 인증을 위해 개인 키를 사용할 Keychain Access.app때는 권한 부여 여부를 묻는 창이 나타납니다. 큰 대답을 얻은 후에 keychain Access.app개인 키를 ssh-agent의 저장소에 추가합니다 .

두 가지주의를 기울여야합니다.

  1. Mac OS X Lion ssh-agent은 시동시 자동으로 서비스를 시작하고 아래의 소켓에서 청취합니다 /tmp.
  2. Keychain Access.appSSH 암호 문구를 저장하므로 ssh-agent방해받지 않고 개인 키를 추가 할 수 있습니다 . 예. SSH 문구를 입력 할 필요는 없지만이 항목을 처음 만들 때 권한을 부여하려면 Mac 계정의 로그인 암호를 입력해야합니다.

요약하자면, SSH-login-without-asking-passphrase는 Mac OS X에서 기본적으로 작동합니다.


1

여기에 다른 솔루션이 사람들에게 적합하지 않은 경우 다음이 저에게 효과적이었습니다.

~ / .ssh 디렉토리에있는 모든 개인 키마다 해당하는 공개 키가 있는지 확인하십시오. 공개 키의 이름은 개인 키와 정확히 동일하지만 .pub끝에 있어야합니다. 적절한 공개 키가 이미 있으면 다시 생성하십시오.

공개 키를 다시 작성해야하는 경우 쉽게 수행 할 수 있습니다.

ssh-keygen -y -f ~/.ssh/my_key > ~/.ssh/my_key.pub

my_key당신의 키가 무엇이든 대체 합니다.

그 후, MacOS는 키 체인의 키 암호 문구를 기억합니다.

참고-암호를 입력하고 키 체인을 저장하는 것은 이제 한 번만 수행하는 작업 (OP가 원하는대로 로그인 세션 당 한 번이 아님)이지만 문제의 mac에 대한 로그인이 암호로 보호되어 있다고 가정하면 암호는 해당 암호로 보호됩니다. 또한이 솔루션은 나에게 이해가되지 않습니다 ... 개인 키 외에도 공개 키가 필요하지 않지만 어떤 이유로 MacOSX에 필요합니다.

(원래의 대답 애플 스택 거래소에 비슷한 질문에)


1

~/.ssh폴더 구성과 관련하여 거의 언급하지 않은 것은 디렉토리 권한을 제한하는 것입니다.

난 항상에 사용자의 홈 디렉토리 권한을 설정했다 한 암호를 묻는 피하기 위해 SSH를 사용하려면 700, 그리고 ~/.ssh에 폴더 권한 700뿐만 아니라.

그렇지 않으면 모든 키가 올바르게 생성되고 복사 된 경우에도 계속 암호를 묻습니다. 인증 로그에 오류 메시지가 생성되지만 최종 사용자에게는 보이지 않습니다.


0

시도 할 수있는 또 다른 것은와 ssh-copy-id같은 것으로 대체되었을 것 k="$(cat ~/.ssh/id_rsa.pub)"; ssh username@somehost.com "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"입니다.


0

이 답변은이 질문에 대한 해결책이 아닙니다. 그러나 그것은 매우 가깝습니다 (내 문제에 대한 해결책을 찾는 동안이 질문에 끝났습니다).

또한이 질문에 설명 된 것처럼 Mac의 원격 서버에 많은 SSH를 수행하지만 Keychain Access.app앱은 키 구문을 저장했으며 SSH 서버에서 인증하기 위해 키가 필요할 때마다 입력 할 필요가 없습니다.

그러나 Mac에서 SSH 서버를 활성화하여 원격으로 연결할 수 있습니다. 내 Mac에 원격으로 로그온하면 다른 호스트를 SSH로 할 때 항상 키 문구가 표시됩니다.

키 프레이즈를 현재 세션에 저장할 수 있는 솔루션 을 찾았습니다 . 나는 이것이 누군가에게 유용 할 수 있다고 생각했기 때문에이 게시물 / 답변.


비슷한 솔루션을 여기에 썼습니다 : superuser.com/a/659668/154113
orkoden

0

나는이 문제에 당황했다. 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에 매우 만족할 때.

어쨌든 이제 우리의 모든 사과 상자에 로그인하거나 암호를 입력하지 않고 원격 명령을 실행할 수 있습니다 : 프롬프트 ...

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