ssh-agent를 다른 화면에 걸쳐 연결 상태로 유지하는 방법이 있습니까?

ssh-agent를 다른 화면에 걸쳐 연결 상태로 유지하는 방법이 있습니까?

비밀번호 없는 로그인을 위해 ssh-agent를 사용할 때마다 서로 다른 로그인 및 화면 세션이 동시에 진행되더라도 작동하지 않습니다.

다른 세션에서 작동하지 않는 일부 쉘 변수를 사용하는 것 같습니다. 이를 구성하거나 모든 세션에 나타날 수 있는 일종의 변수를 사용하도록 할 수 있는 방법이 있습니까?

답변1

나는 이를 사용하여 환경 변수를 keychain관리 ssh-agent하고 한 번에 하나의 에이전트만 실행되도록 하는 역할을 합니다. .bashrc적절한 기계에서 나로부터 :

# is this an interactive shell?
if [[ $- == *i* ]]; then
    # set up ssh key server
    if [[ -x /usr/bin/keychain ]]; then
        eval $(keychain --eval --ignore-missing the <keys I want>)
    fi
fi

에 환경 변수를 저장하고 ~/.keychain, 찾을 수 없는 경우 에이전트를 실행하며, 에 새 변수나 기존 변수를 반환합니다 eval. 몇년전에 설정했는데 아직 건드리지 않았네요. 이를 설치 한 경우 ssh-askpass키체인을 실행하는 셸이 표시되지 않더라도(예: X11 초기화 스크립트) X11 환경에서 비밀번호를 묻는 메시지를 표시할 수 있습니다.

이것을 사용하는 다른 방법이 있지만 X11에 로그인하지 않았을 때 원격으로 워크스테이션에 로그인하는 것을 포함하여 여러 Linux 워크스테이션에서 이 방법이 작동합니다.

답변2

예, ssh는 SSH_AUTH_SOCK 변수를 사용하여 프록시에 액세스합니다.

다른 세션에서 다른 에이전트를 시작하면 비밀이 공유되지 않습니다.

ssh-agent이 인스턴스에서 설정한 변수를 보려면 실행하세요 .

man ssh-agent가능한 옵션에 대해 알아보려면 계속 읽어보세요 . (특히 -a가 귀하의 경우에 도움이 될 것입니다.)

에이전트를 공유하는 가장 좋은 방법은 상황에 따라 크게 달라집니다. 하나의 에이전트만 실행 중이고 모든 세션이 이를 사용하도록 설정되어 있는지 확인해야 합니다.

일부 데스크탑 환경을 사용하는 경우 일반적으로 SSH 에이전트가 시작되고 데스크탑 세션 내에서 시작된 모든 프로세스에서 사용할 수 있도록 환경이 설정됩니다. - 새 에이전트를 모든 세션에 공유하려면 screen화면을 다음과 같이 실행하면 됩니다 ssh-agent screen. - 상자 내부에서 SSH를 통해 프록시에 액세스하려는 경우에도 가능하지만, 스스로 해결해야 합니다.

답변3

모든 사람의 로그인 프로세스에 대한 스크립트를 작성할 수 있습니다.

  1. (이 사용자에 대해) 실행 중인 ssh-agent 인스턴스가 하나 이상 있는지 확인하십시오.
  2. 사용할 인스턴스 선택(가장 오래된 것)
  3. 이 프로세스에 대한 소켓 정보가 사용 가능한지(그리고 올바른지) 확인하세요.
  4. 성공하면 자신의 환경에서 이 정보를 얻으십시오.
  5. 다른 인스턴스를 죽일 수도 있습니다(적어도 자체 인스턴스인 경우).
ps -o pid,etime,args --no-headers --sort=start_time \
  -p $(pgrep --uid $USER ssh-agent) | 
    awk '{print $1; exit;}'

가장 오래된 ssh-agent 인스턴스의 PID를 제공합니다. 이것이 더 쉬울 수 있지만 pgrep --uid $USER --oldest ssh-agent이렇게 하면 다른 인스턴스의 PID도 쉽게 얻을 수 있습니다.

$SSH_AUTH_SOCK파일에 쓸 수 있습니다 ~/.ssh/env/$PID( $SSH_AGENT_PID현재 프로세스가 $PID와 동일한 경우).

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.ssh/env/$PID

다른 세션에서는 파일이 존재하고 여전히 유효한지 확인하고 가져올 수 있습니다.

bash -c 'test -e ~/.ssh/env/$PID || exit 1;
  . ~/.ssh/env/$PID; test -e $SSH_AUTH_SOCK' && . ~/.ssh/env/$PID

답변4

우수한 사용ssh-ident보안 강화를 위해 여러 ID를 지원합니다.

다음의 직접 래퍼입니다 ssh.scp

ln -s /usr/bin/ssh-ident ~/bin/ssh
ln -s /usr/bin/ssh-ident ~/bin/scp

하나 있다스스로 제안한 답변이 많음, 그런데 왜 바퀴를 재발명합니까?

관련 정보