ssh가 항상 SSH_ASKPASS를 사용하도록 강제

ssh가 항상 SSH_ASKPASS를 사용하도록 강제

ssh가 항상 지정된 프로그램을 사용하도록 하고 싶습니다 SSH_ASKPASS. 내 경우에는 프로그램이 단지 비밀번호를 반환하는 bash 스크립트일 뿐입니다.

문제는 SSH 문서에 다음과 같이 명시되어 있다는 것입니다.

SSH에 비밀번호가 필요한 경우터미널에서 실행하면 현재 터미널에서 비밀번호를 읽습니다..

따라서 터미널에서 ssh를 실행하면 SSH_ASKPASS무시됩니다.

비슷한 질문이 있습니다: 키 비밀번호에 대한 그래픽 프롬프트를 사용하도록 SSH에 지시

아래와 같이 ssh에 대한 별칭을 만드는 것이 좋습니다.

$ alias ssh="setsid ssh"

하지만 ssh를 직접 호출하지 않고 git 또는 rsync에서 호출하기 때문에 작동하지 않습니다.

나도 하나 찾았어공개 질문OpenSSH Bugzilla에서 수정이 요청되었지만 2002년에 공개되었기 때문에 구현될 것이라고는 믿지 않습니다.

나는 이상한 해결책을 생각하고 있습니다.

  1. 스크립트를 호출하고 비밀번호를 반환하는 가짜 SSH 에이전트를 만듭니다.
  2. 새로운 SSH 프로세스를 찾는 프로세스를 생성하고 SSH가 비밀번호를 요청하기 전에 터미널에서 프로세스를 분리합니다.

더 좋은 제안이 있나요?

답변1

매뉴얼 에 따르면 ssh:

ssh연관된 터미널이 없지만 DISPLAY 및 SSH_ASKPASS가 설정된 경우 SSH_ASKPASS에 지정된 프로그램을 실행합니다 .

따라서 터미널에서 연결을 해제하고(예: 파이프 추가) DISPLAY설정되어 있지 않은지 확인해야 합니다(터미널을 암호 문구로 사용하려는 경우).

간단한 예:

echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh ...

다음과 동일 ssh-add:

$ echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh-add id_rsa
ssh_askpass: exec(/my/cmd): No such file or directory

답변2

안타깝게도 연결하신 미해결 문제에 액세스할 수는 없지만 시도해 봤습니다.@npostavs' 제안( DISPLAY어떤 값으로 설정), 작동하는 것 같습니다 1 .

예를 들어:

# List heads in a remote git repo
DISPLAY=: setsid git ls-remote -h [email protected]:NFL/tests.git

어디

$ cat ${SSH_ASKPASS}
#!/bin/bash
echo ABCSuperPassword

SSH_AGENTgit( GIT_TRACE=2자세한 출력으로 설정) 에 의해 호출된 이 예에서는 "ABC 슈퍼 비밀번호"를 개인 키의 비밀번호로 사용합니다.

노트

DISPLAY원격 터미널에 로그인하면 일반적으로 1이 설정 해제됩니다.

관련 정보