키 암호에 대한 그래픽 프롬프트를 사용하도록 SSH에 지시


41

터미널을 사용하는 표준 프롬프트 대신 그래픽 프롬프트 (예 : GTK)를 사용하여 SSH가 비밀번호 문구를 요청하도록하려면 어떻게해야합니까?

설정을 시도 SSH_ASKPASS=/usr/bin/ssh-askpass했지만 아무런 효과가없는 것 같습니다.

문제는 openssh 문서가 말하는 사실입니다

ssh 에 터미널이 연결되어 있지 않지만 DISPLAY 및 SSH_ASKPASS가 설정된 경우 SSH_ASKPASS에 지정된 프로그램을 실행하고 X11 창을 열어서 암호문을 읽습니다.

a의 결과로 내 경우, 명령 줄에서 시작은 SSH는 git push, 그렇게, 그와 연관된 터미널이 SSH_ASKPASS논리를 무시하는 것 같다.

필자 ssh-add는 키 쌍이 있지만 암호로 보호되는 호스트에 대한 일반적인 ssh 호출에 대해 언급하고 있지 않습니다 .

답변:


32

# 1-패키지가 없습니까?

포함 된 패키지가 누락되었을 수 있습니다 ssh-askpass. 설치해보십시오.

페도라 / CentOS / RHEL :

$ sudo yum install openssh-askpass

데비안 / 우분투 :

$ sudo apt-get install ssh-askpass-gnome ssh-askpass

누락 된 유틸리티 찾기

다음 명령을 사용하여 누락 된 도구를 검색 할 수 있습니다.

페도라 / CentOS / RHEL :

$ yum search ssh-askpass
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
======================================================= Matched: ssh-askpass =======================================================
x11-ssh-askpass.x86_64 : A passphrase dialog for X and not only for OpenSSH
ksshaskpass.x86_64 : A KDE version of ssh-askpass with KWallet support
connect-proxy.x86_64 : SSH Proxy command helper
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X

데비안 / 우분투 :

$ apt-file -l search ssh-askpass
app-install-data
cruft
git-cola
luckybackup-data
pssh
sdm-terminal
seahorse
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome

# 2-연결이 끊어진 터미널?

나는 이것을 처음 놓쳤지만 더 많은 것을 읽은 후에 환경 변수 에 ssh관한 매뉴얼 페이지 에서이 의견을 발견했습니다 SSH_ASKPASS.

발췌

SSH_ASKPASS    If ssh needs a passphrase, it will read the passphrase from the 
               current terminal if it was run from a terminal.  If ssh does not
               have a terminal associated with it but DISPLAY and SSH_ASKPASS 
               are set, it will execute the program specified by SSH_ASKPASS 
               and open an X11 window to read the passphrase. This is particularly
               useful when calling ssh from a .xsession or related script.  
               (Note that on some machines it may be necessary to redirect the 
               input from /dev/null to make this work.)

주석에서 알 수 있듯이, ssh에 "관련된 터미널이 없습니다" AND DISPLAY & SSH_ASKPASS가 설정되어 있습니다. 이것이 핵심입니다. 그래서 얻기 위해 ssh사용하는 SSH_ASKPASS우리가 얻을 필요 ssh(일명. 터미널이하지 않는 STDINSTDOUT첨부 참조).

명령을 사용하여이를 수행하는 한 가지 방법 setsid입니다. 기분 나빠하지 마십시오. 이 도구에 대해 들어 본 적이 없습니다. 매뉴얼 페이지에서 :

setsid-새 세션에서 프로그램을 실행

ssh"프로그램"으로 실행하면 맨 페이지 에서 언급 한 기준에 맞는 터미널에서 setsid분리 할 수 ​​있습니다 . 다른 기준은 다음과 같이 설정됩니다.sshssh

$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass

우리가 이것을 모두 합치면 :

$ setsid ssh user@remotehost

예를 들면 다음과 같습니다.

$ setsid ssh user@skinner

                                       부탁 GUI의 SS

해결책

setsid"내장"으로 만들려면 다음과 같이 별칭을 만들 수 있습니다.

$ alias ssh="setsid ssh"

이제 ssh비밀번호를 묻는 GUI 팝업이 나타납니다.

$ ssh user@skinner

참고 문헌


ssh-askpass gnome이 설치되어 있으며 수동으로 시작하면 제대로 작동합니다.
gioele

@gioele-업데이트 참조, 나는 그것을 알아 냈다고 생각합니다.
slm

이 솔루션의 문제점은 각 git 또는 rsync 명령을 수정하여 setsid sshinstad of plain 을 사용해야 한다는 것입니다 ssh.
gioele

@gioele-암호 GUI를 "강제"하는 방법을 요청했습니다. ssh별명 과 같은 명령을 대체 할 수 있습니다 setsid ssh. 다른 방법이 있습니다. 제한 요소는 openssh가 ASK_SSHPASS를 활성화하기 위해 첨부 된 TTY가 필요하지 않다는 것입니다.
slm

패키지가 누락되어 있지 않아 터미널 setsid에서 사용할 수 없습니다 ssh. 그것은 단지 유효한 대답이 아닙니다!? 또한 이전 버전의 Ubuntu에서 작동하고 있었기 때문에 갑자기 작동이 중지 된 이유를 잘 모르겠습니다.
Alexis Wilke

8

현재 OpenSSH에서는 수행 할 수 없습니다. OpenSSH Bugzilla에서 2013-07 현재이 기능을 요구하는 문제가 있습니다 : Generalize SSH_ASKPASS .


이것은 질문에 대한 답변을 제공하지 않습니다. 저자에게 비평을하거나 설명을 요청하려면 게시물 아래에 의견을 남겨주십시오.
cuonglm

8
@cuonglm "이것은 불가능하다"는 답이다. 잘못되었거나 오도의 소지가 있지만 (아직 말하고 있지는 않지만) 여전히 답입니다.
terdon

2

단일 명령을 위해 터미널을 닫는 방법이 있으며 파일 리디렉션을 사용하고 있습니다.

ssh-add > /dev/null < /dev/null 2>&1

ssh-add터미널이 닫힌 상태 에서 명령이 실행됩니다 . 복잡성을 제외하고는 훌륭하고 멋집니다. 그러나 이제 올바른 명령을 알고 있으므로 간단히 명령을 별명으로 만들고 다음에 추가하십시오 ~/.bash_aliases.

alias ssh-add="/usr/bin/ssh-add > /dev/null < /dev/null 2>&1"

그리고 당신은 설정되어야합니다. 간단히 입력 ssh-add하면 별칭이 호출되어 모든 리디렉션이 적용된 실제 명령이 호출됩니다.

ssh-add이제 올바르게 (우분투 또는 파생 상품, 그들은 다른 곳에서 다른 이름을 가질 수있다) 다음 패키지 중 하나를 가지고 제공 ... 당신에게 대화 상자와 암호를 묻습니다 :

  • ssh-askpass
  • ssh-askpass-fullscreen
  • ssh-askpass-gnome
  • ksshaskpath
  • kwalletcli
  • lxqt-openssh-askpass
  • razorqt-openssh-askpasss

이제 그 모든 것이 무엇을 의미합니까?

2>&1수단에 관한 동일한 장소 디스크립터 파일 # 1 (표준 출력)에 파일 디스크립터 # 2 (표준 오차) 리디렉션.

> /dev/null의미는 표준 출력을 /dev/null로 변환하는 것입니다.이 출력 은 작성된 모든 데이터를 버리는 특수 파일입니다.

< /dev/null수단은 표준 입력 리디렉션 /dev/null(IDEM 참조).

부수적 인 참고 사항이지만 관련이 있지만 관련 참고 사항 인 bash에서 서비스를 프로그래밍하려면 서비스가 실제로 무엇인지, 표준 입력, 출력 및 오류가 닫힌 프로세스를 배경으로 기억해야합니다.

service > /dev/null < /dev/null 2>&1 &

유일한 차이점은 끝에 &가 추가된다는 것입니다 ( ssh-add이론적으로 이론적 명령에 대한 명령 을 변경했다는 사실입니다 service. 이러한 명령은 백그라운드에서 올바르게 서비스를 제공합니다.


자세한 답변 Victor에게 감사합니다. 그러나 요구 사항에 맞지 않습니다. 질문의 끝에서 쓴 것처럼«ssh-add를 언급하는 것이 아니라 키 쌍이 있지만 암호로 보호되는 호스트에 대한 일반적인 ssh 호출을 언급하십시오.».
gioele

내가 참조. 글쎄, ssh기능은 똑같은 방식으로 이루어졌으며 이전에 준 것과 같은 대답이 여전히 적용됩니다. 그냥 모든 선두로부터 교체 ssh-add와를 ssh하면 집합입니다.
Victor

ssh에 대해 stdin / stdout을 닫으면 ssh를 통해 명령을 어떻게 제공합니까? ;)
gioele

이것은 ssh-add나를 위해 일했습니다 -원하는 동작을 얻기 위해 stdout / stderr을 리디렉션 할 필요조차 없었습니다 ssh-askpass. (이것 ssh-add < /dev/null으로 충분합니다.)
Ben Stern

0

ArchLinux에 seahorse-ssh-askpass패키지 gnome-keyring를 설치하지 않고 seahorse (제공하는 )를 설치할 때도 같은 문제가 있었습니다.

이 패키지의 내용 gnome-keyring( https://www.archlinux.org/packages/extra/i686/gnome-keyring )을 보면 문제를 해결하는 데 도움이 될 수 있습니다.

어쨌든 해마 사용에 신경 쓰지 않으면 패키지 seahorsegnome-keyring배포 용 패키지를 설치할 수도 있습니다 . Gnome을 사용하지 않으면 https://wiki.archlinux.org/index.php/GNOME_Keyring 과 같은 추가 단계가 필요할 수 있습니다 .

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