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

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

저는 매일 Mac OS X Lion을 사용하고 SSH를 통해 원격 호스트에 로그인합니다. 원격 인증을 위해 SSH 키 쌍을 사용하고 모든 호스트의 로그인 문구를 모터화할 필요가 없다는 사실에도 불구하고 터미널이 내 SSH 개인 키에 액세스하기 위해 비밀번호 문구를 요구하는 것은 여전히 ​​매우 짜증나는 일입니다.

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

keychainGentoo Linux에서 잘 작동하는 스크립트가 있습니다 . 하지만 저는 Mac OS X Lion에서는 그것을 전혀 이해하지 못했습니다. 게다가 , 등 위협적인 용어가 너무 많아요 ssh-agent. ssh-addSSH 툴킷에 대한 다양한 자료를 읽고 몇 가지 실망스러운 실험을 수행한 후 저는 더욱 혼란스러워졌습니다.

그래서 저는 다음 질문에 대한 조언을 찾기 위해 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 "[email protected]"
# Set a passphrase for accessing the private key.

2단계. 내 SSH 공개 키를 원격 호스트에 복사합니다. 예를 들어, Mac의 localhost에 키를 복사합니다.

$ 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

어떤 피드백이라도 환영합니다. 감사해요!

답변1

ssh-agent당신이 요구하는 것과 정확히 일치하므로 당신이 작업하고 싶은 부분입니다. 에이전트는 데몬으로 실행되며 여기에 개인 키를 "추가"하면 해당 키를 기억하고 sshd초기 연결 중에 자동으로 원격 장치에 제공합니다. ( ssh-add단순히 개인 키를 수동으로 추가하기 위해 실행하는 명령입니다 ssh-agent).

ssh-agentOS X에서는 Leopard와 마찬가지로 수동으로 실행 하거나 수동으로 실행할 필요가 없습니다 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/

답변2

"문제"를 해결하는 과정에서 몇 가지 관련 주제를 검색하고 ssh-agent, ssh-add, keychain, KeyChain Access.app작동 방식에 대한 몇 가지 메모를 적었습니다. 결국 이 문제는 전혀 문제가 아닌 것으로 밝혀졌습니다. 오히려 이 문제는 전적으로 나에 관한 문제입니다.매번 암호 문구를 묻지 않고 ssh-로그인기본적으로 Mac에서 완벽하게 작동합니다.

하지만 이 과정을 통해 나에게 약간의 경험이 생겼습니다. 누군가가 해당 용어에 대해 혼란스러워하는 데 도움이 되기를 바라며 여기에 메모를 적습니다.

두 가지 비밀번호 용어:

  • passphraseSSH 개인 키에 액세스할 때 필요한 문구를 나타냅니다.
  • passwordMac에 로그인하는 데 필요한 문구를 나타냅니다.

이제 Mac에서 이 툴킷이 수행하는 작업, 즉 ssh-agent, ssh-add, keychain, 을 알아낼 수 있습니다 .Keychain Access.app

  • 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작업을 수행합니다.
  • keychain서비스를 찾고 ssh-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-agentSSH 암호 문구를 저장하므로 방해받지 않고 개인 키를 추가할 수 있습니다 . 예, SSH 문구를 입력할 필요는 없지만 이 항목을 처음 생성할 때 권한을 부여하려면 Mac 계정의 로그인 비밀번호를 입력해야 합니다.

그래서 요약하자면,암호문을 묻지 않고 SSH 로그인을 하면 Mac OS X에서 기본적으로 작동합니다.

답변3

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

~/.ssh 디렉터리의 모든 개인 키에 대해 해당 공개 키도 있는지 확인하세요. 공개 키의 이름이 개인 키와 정확히 동일하지만 .pub끝에 가 있는지 확인하세요. 적절한 공개 키가 이미 있는 경우 다시 생성해 보세요.

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

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

my_key귀하의 키가 무엇이든 교체하십시오 .

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

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

(원래부터답변Apple Stack Exchange의 비슷한 질문에 대해)

답변4

당신이 시도할 수 있었던 또 다른 ssh-copy-id것은 .k="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"

관련 정보