pass
GUI 상호작용 없이 프로그램에서 직접 비밀번호를 추출하여 SSH 서버에 로그인하려고 합니다 .
GUI(Gnome)의 일반적인 작업 흐름은 다음을 수행하는 것입니다.
- 비밀번호를 클립보드로 가져옵니다.
pass -c Misc/MyAccount
SSH 프로그램을 실행하고 GUI 클립보드를 사용하여 붙여넣기
ssh myserver Right-Click + Paste
GUI 구성 요소 없이 이 작업을 수행하고 싶었기 때문에 다음과 같이 할 수 있다고 생각했습니다.
pass Misc/MyAccount | ssh myserver
ssh
분명히 이것은 비밀번호가 정확하게 읽히지 않기 때문에 작동하지 않습니다 stdin
. 내가 찾은이 문제다음 스크립트를 만들었습니다.
export SSH_ASKPASS="/path/to/script/calling/pass"
setsid ssh "myserver"
gnome-terminal
GUI에서 실행할 때 이것은 훌륭하게 작동합니다.
그러나 Linux 가상 터미널(Control-Alt-F1)에서는 비밀번호 프롬프트가 pass
평소처럼(터미널에서 직접) 팝업되지 않아 로그인이 실패하기 때문에 실패합니다.
Linux 가상 터미널에서 이 기능을 구현하는 방법은 무엇입니까?
원하는 행동
- 위의 스크립트를 실행하세요.
- 프로그램 비밀번호 팁 을 참조하십시오
pass
. - 성공적으로 로그인하기 위해 서버 비밀번호를 수동으로 입력할 필요가 없습니다
ssh
.
답변1
이것이 작동하려면 충족해야 할 몇 가지 요구 사항이 있습니다.
DISPLAY
SSH_ASKPASS
기능을 활성화하려면 환경 변수에 무엇인가(무엇이든 가능함)를 설정해야 합니다 .gpg-agent
tty를 기반으로 해야 합니다 .소나무프로그램. Debian/Ubuntu 시스템에서 실행apt-get install pinentry-curses
하고 사용하세요/usr/bin/pinentry-curses
.
다음과 같이 스크립트를 실행합니다.
export DISPLAY=anything
export SSH_ASKPASS="/path/to/script/calling/pass"
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid ssh myserver
setsid
최신 릴리스(Debian 8.0 이상, Ubuntu 14.10 이상)의 util-linux는 하위 프로세스가 종료될 때까지 기다려야 합니다 . -w
그렇지 않으면 백그라운드에서 실행 중인 ssh 세션으로 인해 혼란을 겪게 됩니다.
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid -w ssh myserver