SSH를 통한 gpg-agent 사용


8

단일 명령 줄을 통해 ssh를 통해 gpg-agent를 사용하는 데 문제가 있습니다.

내 구성은 다음과 같습니다.

서버 A : ssh를 통해 명령을 트리거합니다.

ssh user@serverB "sudo -E /path/to/script.sh"

서버 B : 암호 문구가 필요한 스크립트를 실행합니다.

시스템 정보 : 우분투 12.04

서버 B에서 gpg-agent를 설정했습니다.이 구성을 /home/user/.bashrc에 추가했습니다.

Invoke GnuPG-Agent the first time we login.                                                                          
# Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?                                    
if test -f $HOME/.gpg-agent-info && \
    kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
    GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
else
    # No, gpg-agent not available; start gpg-agent                                                                     
    eval `gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info`
fi
export GPG_TTY=`tty`
export GPG_AGENT_INFO

다음은 /home/user/.gnupg/gpg-agent.conf의 에이전트 구성입니다.

enable-ssh-support
#1 year cache support
default-cache-ttl 31536000
default-cache-ttl-ssh 31536000
max-cache-ttl 31536000
max-cache-ttl-ssh 31536000
#debug-all

따라서이 작업을 수행하기 위해 ssh를 통해 serverB에 연결합니다.

ssh user@serverB

gpg-agent가 시작되면 스크립트를 수동으로 트리거합니다.

sudo -E /path/to/script.sh

그런 다음 gpg-agent가 암호 문구를 묻는 메시지를 표시합니다. 암호 문구를 설정하면 스크립트를 다시 실행할 수 있으며 암호 문구를 요구하지 않고 작업을 수행합니다.

내 문제는, 예를 들어, 먼 거리에서 트리거하려고 할 때입니다.

ssh user@serverB "sudo -E /path/to/script.sh"

스크립트가 계속 암호를 요구하기 때문에 gpg-agent가 작동하지 않는 것 같습니다.

편집하다:

sudo 암호없이 스크립트를 원격으로 실행하고 환경 변수를 유지하기 위해 /etc/sudoers.d/user에 다음 내용을 추가했습니다.

user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh

어떤 아이디어?


질문을 용서하지만 암호를 요구하고 있습니까? 위에 표시된 내용으로 명령 을 인증 하기 위해 비밀번호를 요구할 것으로 예상됩니다 sudo.
MadHatter

나는 멀리서 실행하려고하는 사용자 / 명령에 대해 NOPASSWD로 sudoers 파일을 관리했습니다. 나도 이것을 정확하게해야 할 수도 있습니다. 암호 문구를 요구합니다.
Tony

좋습니다. 분명히 해줘서 고마워, 나는 우리가 명백한 것에 물린 것이 아닌지 확인하고 싶었다!
MadHatter

답변:


1

로그인 한 ssh user@serverB후 수동으로 스크립트를 실행하면 처음으로 암호 문구를 입력하라는 메시지가 표시되고, 스크립트를 실행할 때 shh-agent는 저장된 암호를 제공합니다.

그러나 당신이 실행할 때 ssh user@serverB "sudo -E /path/to/script.sh마다 매번 새로운 로그인을하고 있으며 ssh-agent가 별도의 SSH 로그인을 통해 암호 문구를 저장하는 것을 지원하지 않는다고 생각합니다.

키 체인이 필요한 작업을 수행하는 것으로 보입니다 : http://www.funtoo.org/Keychain

키 체인을 사용하면 로컬 컴퓨터를 재부팅 할 때마다 암호를 한 번만 입력하면됩니다. 또한 키 체인을 사용하면 원격 크론 작업을 오래 실행되는 ssh-agent 프로세스에 안전하게 "연결"할 수 있으므로 스크립트가 키 기반 로그인을 활용할 수 있습니다.

현재 버전의 키 체인은 gpg-agent 및 ssh-agent를 지원합니다.


지금까지로 ssh체인 가고, 당신은 잘못입니다. 나는 이것을 하루에 여러 번한다. ssh호스트 A에서 호스트 B로, C로, D로, 헤드의 ssh-agent가 항상 주요 작업을 수행합니다.
MadHatter

내 이해는 그가 에이전트를 사용하여 A에서 B로 연결하려고 시도하지 않는다는 것입니다. 서버 B는 모든 의도와 목적을 위해 ssh-agent 클라이언트로 설정되며 sudo -E /path/to/script.sh서버 B에서 실행될 때 여기에 무언가가 필요합니다. 편집 : 귀하의 의견을 염두에두고 A가 에이전트 클라이언트로 구성하고 ssh-agent 전달을 사용하면 암호 문구를 요구하지 않고 서버 B에서 스크립트를 실행할 수 있습니다. .
v25

좋아, 서버 A에서 gpg-agent를 설정하려고 시도합니다. ssh-agent 전달에 대한 정보가 있습니까? 나는이 게시물을 지금까지 보았다 : superuser.com/questions/161973/…
Tony

이것은 잘 문서화되어 있으며 여기에 가이드가 있습니다 : livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25

사과합니다 v25, 당신이 옳은 것 같습니다. Tony, 연결이 영구적이지 않기 때문에 B에서 에이전트를 실행하면 작동하지 않습니다.
MadHatter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.