ssh-agent가 ssh 및 tmux (OS X)에서 작동하도록하려면 어떻게해야합니까?


17

내 github 계정에 개인 키가 설정되어 있는데, 암호문은 OS X의 키 체인에 저장되어 있다고 생각합니다. 터미널 창을 열고 입력 할 때 입력 할 필요는 없습니다 ssh git@github.com.

그러나 ssh 세션을 통해 또는 tmux 세션에서 로컬로 bash를 실행하는 경우 github에 ssh를 시도 할 때마다 암호 문구를 입력해야합니다.

이 질문 은 화면에 비슷한 문제가 있음을 시사하지만 tmux 에서이 문제를 해결할만큼 충분히 이해하지 못했습니다. 도 있습니다 이 페이지 상당히 복잡한 솔루션을 포함하지만 zsh을위한.

편집 :

에 대한 응답으로 미켈의 대답 @ , 나는 다음과 같은 출력을 얻을 로컬 터미널에서 :

[~]
$ echo $SSH_AUTH_SOCK
/tmp/launch-S4HBD6/Listeners
[~] 
$ ssh-add -l
2048 [my key fingerprint] /Users/richie/.ssh/id_rsa (RSA)
[~]
$ typeset -p SSH_AUTH_SOCK
declare -x SSH_AUTH_SOCK="/tmp/launch-S4HBD6/Listeners"

ssh 또는 tmux에서는 다음과 같은 이점이 있습니다.

[~]
$ echo $SSH_AUTH_SOCK

[~]
$ ssh-add -l
Could not open a connection to your authentication agent.
[~]
$ typeset -p SSH_AUTH_SOCK
bash: typeset: SSH_AUTH_SOCK: not found

echo $SSH_AGENT_PID 내가 실행 한 쉘은 아무것도 반환하지 않습니다.


무엇에 대해 typeset -p SSH_AUTH_SOCK?
Mikel

@Mikel bash: typeset: SSH_AUTH_SOCK: not foundSSH / TMUX 내에서. 필요한 경우 오늘 밤에 로컬로 시도해 보겠습니다.
Rich

@Mikel 질문에 해당 명령의 출력을 추가했습니다.
Rich

AFAIK, 질문 및 답변은 ​​OS X에만 국한되지 않습니다. 이는 비 OS X 특정 딥 (예 : superuser.com/q/334975/46794superuser.com/q/479796/46794) 을 피하는 것과 관련이 있습니다.
Blaisorblade

@Blaisorblade 나는 암호문이 OS X 키 체인에 저장되어 있다는 인상을 받았다. (지금은 내가 왜 그렇게 생각했는지 기억할 수는 없지만). 맞습니까?
Rich

답변:


4

동료가 라이브 에이전트를 찾는 데 도움이되는 몇 가지 bash 함수를 만들었습니다. https://github.com/wwalker/ssh-find-agent

그는 주로 시스템 간 연결 (랩톱에서 데스크톱 등)에 사용하지만 창 관리자에서 로그 아웃 / 로그인하는 로컬 tmux 세션 (OS X)에서 가장 자주 사용합니다.

용법

  1. ssh-find-agent.bash를 다운로드하십시오 ( git clone git://github.com/wwalker/ssh-find-agent.git작동).

  2. ~ / .bashrc에 다음을 추가하십시오.

    . /path/to/ssh-find-agent.bash
    
  3. 그런 다음 다음을 입력하여 현재 쉘에서 SSH_AUTH_SOCK를 설정할 수 있습니다.

    set_ssh_agent_socket
    

SSH 에이전트 전달이 필요 하지 않기 때문에 작동 할 수있는 다른 것 보다이 답변을 수락했습니다 . 감사!
Rich

8

dagit.o에서 가져온 우아한 솔루션 :

창조하다 ~/.ssh/rc

#!/bin/bash
if [ -S "$SSH_AUTH_SOCK" ]; then
    ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi

추가 ~/.tmux.conf

set -g update-environment "DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
set-environment -g 'SSH_AUTH_SOCK' ~/.ssh/ssh_auth_sock

7

당신의에서 .tmux.conf구성 파일이 줄을 추가합니다 :

set -g update-environment "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION"

이로 인해 이러한 환경 변수가 기본 쉘에서 tmux 내에서 열린 쉘로 복사되어 ssh-agent가 해당 tmux 쉘 내에서 올바르게 작동 할 수 있습니다.


2
이는 해당 값을 tmux 세션 으로 가져 오는 데 적합한 방법 이지만 모든 환경 변수는 이미 기본값 인에 포함되어 있어야합니다 update-environment. OP는 update-environment값을 확인하고 이미 변경되는 모든 위치에서 업데이트해야합니다.
Chris Johnsen 2012

1
흠 .. 더 깊이 파고 들었을 때, 동의합니다. 나열된 설정이 이미 기본값이며 .tmux.conf 파일없이 tmux를 실행하면 모든 것이 제대로 작동합니다. 그리고 .tmux.conf 파일에서 인용 한 줄을 제거하면 이전에는 없었지만 나에게도 효과적입니다. 때때로 다른 문제가 분명히 발생합니다. tmux 세션에 원격으로 일시 중단 / 복원 또는 연결 / 분리 또는 sshing과 관련이있을 수 있습니다. 재현 할 수있는 요소를 찾으면 눈을 뜨고 업데이트합니다.
트레버 파월

update-environment올바르게 설정되어 있습니다. 그러나 여전히 문제가 발생합니다.
Rich

2
이것의 문제는 tmux서버가 없을 때만 구성을 다시 실행 하여 다시 연결하려는 목적을 무시한다는 것입니다. 어쩌면 해당 변수를 다시 업데이트하는 명령 줄 스위치가 있습니까?
Tobias Kienzler

3

OS X에서 ssh를 통해 연결할 때 생성 된 창은 정상적으로 작동 한 후 암호 문구를 묻기 시작했습니다. http://santini.di.unimi.it/extras/ph/my-tmux-setup.html 에서이 줄을 훔치는 문제를 해결하는 방법을 찾았습니다 .

eval $(tmux show-environment -t [YOUR-SESSION] | grep '^SSH_AUTH_SOCK')

불평하는 창에서 실행하십시오.


2

bash 또는 다른 쉘을 사용하고 있는지 확실하지 않지만 이 사람의 tmux 설정 은 bash에서 작동하는 것처럼 보입니다. 개인적으로 나는 oh-my- zsh와 함께 zsh를 사용 하고 있으며 ssh-agent가 추가 된 후 tmux에서 작업하기 시작했습니다.

zstyle :omz:plugins:ssh-agent agent-forwarding on

내 .zshrc 파일에 넣고 실행중인 zsh 세션에서 구성을 다시로드했습니다. 나는 또한 이 사람의 zsh 지향 솔루션을 찾았 지만 그것은 나에게 불필요하다는 것이 밝혀졌습니다.


1

무엇을 하는가 :

echo $SSH_AUTH_SOCK
echo $SSH_AGENT_PID
ssh-add -l

인쇄?

일반 터미널에서 실행 한 다음 tmux세션 내에서 실행하십시오 . 그들은 같은 것을 인쇄해야합니다.


이 명령에 대한 응답을 질문에 추가했습니다. 또한 tmux를 사용하지 않고 ssh를 통해 로그인 할 때 문제가 발생한다는 것을 알았으며 그에 따라 질문을 편집했습니다.
Rich

4
ssh쉽습니다. 에이전트 전달을 켭니다. 가장 쉬운 방법은 ssh -A대신 실행 됩니다 ssh. 매번 입력하거나 별명을 입력 할 필요가 없도록 별칭을 사용하십시오 .SSH/config.
Mikel

감사합니다. 그것은 ssh에 효과적이었습니다. TMUX에서 수정하는 방법에 대한 아이디어가 있습니까?
Rich

0

많은 솔루션이 있지만 2016 년 1 월 8 일자 Hans Ginzel의 답변에서 2014 년 1 월 27 일자 관련 StackOverflow 질문에 대한 가장 간단한 해결책이 있습니다 . 쉘 ~/.profile또는 이와 유사한 것에 다음을 추가하기 만하면됩니다 .

alias ssh='eval $(tmux show-env -s | grep "^SSH_") && ssh'

여러 줄 기능을 정의하거나 새 임시 파일을 만들 필요가 없습니다. 별칭을 원하지 않는 경우 ssh간단히 변경 하고 끝에서 fixssh제거 하고 다시 연결된 tmux 세션 내부 에서 실행하려고 할 때마다 실행하십시오 .&& sshfixsshssh

Hans Ginzel의 답변에 따르면 tmux의 '최신 버전'을 실행해야합니다 show-env -s. TMUX 2.7에서 나를 위해이 작품과의 내 독서에 변경 로그 , -s단지 TMUX 0.3의 출시 이전 2008년 6월 3일에 추가되었습니다. tmux 2.3 (2016 년 9 월 29 일)은 데비안에서 안정적입니다.

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