이미 전달 된 ssh 키를 tmux로 전달하려면 어떻게해야합니까?

키가 저장된 컴퓨터에서 SSH를 통해 연결하여 두 번째 컴퓨터로 전달한 다음 tmux 내에서 키를 사용하려고합니다. tmux에 들어갈 때 전달을 “느슨하게”하는 것 같습니다. tmux 내에서 키를 사용할 수 있도록 “다시 전달”하는 방법은 무엇입니까?

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)


답변

이미 존재하는 tmux 세션을 연결하는 경우, 쉘은 로그인 쉘에서 환경 변수를 상속하지 않습니다. 특히 ssh 에이전트 환경 변수를 상속하지 않습니다.

이 수정을 시도 하십시오 :

  1. 이 스크립트를 작성하여 $ HOME / .ssh / saveagent에 넣으십시오.

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. 쉘 시작 스크립트에 추가하십시오. 예를 들어 bash를 사용하는 경우 :

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. tmux를 연결 한 후 다음을 실행하십시오. . $HOME/.ssh/latestagent

참조 어떻게 SSH를 통해 연결 한 후 스크립트를 즉시 실행할 수 있습니까? TMUX 세션에 연결하고 명령을 실행


답변

동일한 tmux서버 세션에 의해 생성 된 새 쉘에서 추가로 생성되는 모든 쉘에 필요한 모든 변수를 포함하는 스크립트를 제공하지 않는 한 , 명령을 사용 tmux하여 변수를 세션 또는 전역 환경에 배치하도록 지시 할 수 set-environment있습니다. 예를 들어 다음과 같습니다 (bash의 경우).

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

-g다른 세션에서도 플래그 를 추가하고 -t <session>외부에서 실행중인 경우 플래그 를 추가해야합니다 tmux.


답변

여기에서 다른 답변을 읽은 후에는 공개 / 개인 키 쌍을 원격 서버에 복사하기 만하면 더 이상 에이전트 전달에 대해 걱정할 필요가 없습니다.