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


15

키가 저장된 컴퓨터에서 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)

모든 세션간에 공유 된 에이전트를 시작하면 작동합니다. bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > ssh-agent 프로세스 구성 문서 에서이 결과를 얻는 방법에 대해 설명합니다.
Dereckson

답변:


12

이미 존재하는 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 세션에 연결하고 명령을 실행


1
다른 sh 쉘과 호환하려는 경우 .profile로 보내십시오.
Dereckson

2
좋은 대답입니다! 내가 만난 몇 가지 문제 : a-일부 환경 변수에는 공백이 포함되어 있으므로 saveagent스크립트의 마지막 줄 은 다음과 같아야합니다 echo "export $var=\"$(eval echo '$'$var)\"". b- 대신 latestagent스크립트를 호출해야 하므로 변수를 설정하면 호출 쉘에 영향을줍니다. c- tmux 연결시 자동으로 스크립트 호출은 여기에 설명 된 방법을 통해 수행 할 수 있습니다. unix.stackexchange.com/questions/86925/…sourceshlatestagent
Joe

@Joe 님, 감사합니다. 개선 사항을 포함하도록 답변을 수정했습니다.
GnP

0

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

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

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


0

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

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