필요한 경우에만 SSH 키 비밀번호를 요청하는 방법은 무엇입니까?

필요한 경우에만 SSH 키 비밀번호를 요청하는 방법은 무엇입니까?

(저는 이 사이트에서 관련이 있는 것으로 보이는 많은 질문을 읽었으며 이것이 정말 새로운 질문이라고 생각합니다.)

많은 서버에 많은 키가 있고 모두 비밀번호로 보호되어 있습니다.

나는 암호를 입력하는 것만큼이나 암호를 입력하는 것도 좋아합니다. 이는 생산성을 저하시키는 일입니다.

  • SSH 에이전트+SSH 추가이 명령은 로그인 쉘에서 사용할 수 있습니다. 즉, 로그인 시 비밀번호를 한 번만 입력하면 됩니다.

  • 열쇠고리로그아웃 후에도 SSH 에이전트를 활성 상태로 유지하는 데 사용할 수 있습니다. 예를 들어 시작 시 암호 문구를 한 번만 입력하면 되도록 하거나 한 시간 정도 활성 상태로 유지하도록 할 수 있습니다.

내가 겪고 있는 문제는 일반적으로 .zshrc쉘 로그인(예를 들어)에서 시작되는 두 솔루션 모두 잠금을 해제할 필요가 없음에도 불구하고 로그인할 때 비밀번호를 입력해야 한다는 것입니다. (저는 에이전트를 무기한으로 유지하는 키체인이 마음에 들지 않습니다.)

내가 원하는 것은 (프록시의 경우) 비밀번호를 묻는 것입니다.필요할 때만.

따라서 서버 A에 로그인하여 몇 가지 작업을 수행한 다음 서버 B에 SSH를 통해 접속할 수 있습니다.그 순간비밀번호를 물었습니다. 서버 B에서 작업을 수행하고 로그아웃합니다. A로 돌아가서 몇 가지 작업을 더 수행하고 다시 B로 ssh를 수행합니다. 비밀번호는 필요하지 않습니다(프록시가 보관함).

나는 이것이 Gnome과 같은 그래픽 데스크탑에서 가능하다는 것을 알았습니다. ssh를 시도하면 개인 키를 잠금 해제하기 위해 비밀번호를 묻는 팝업이 표시됩니다. 이것이 내가 추구하는 것이지만 콘솔에서입니다.

답변1

쉘 시작 스크립트에 아무 것도 추가하지 마십시오. 불필요한 해킹입니다.

대신에 추가하세요

AddKeysToAgent yes

.ssh/config에

이와 같이 ssh-add는 처음으로 다른 상자에 SSH를 연결할 때 자동으로 실행됩니다. ssh-agent 키가 만료되거나 다시 시작된 경우에만 키를 다시 입력해야 합니다.

답변2

지쉬preexec명령줄에 입력된 명령을 실행하기 전에 기능을 실행하는 Hook이 있습니다 . 이는 명령줄을 찾고 ssh, 발견되면 SSH 에이전트가 있는지 확인하는 후크입니다. 찾을 수 없으면 키체인이 실행됩니다.

따라서 이 방법으로 키체인은 ssh 명령 이전과 필요할 때만 실행됩니다.

이것을 당신의 ~/.zshrc:

function check_ssh {
  [[ $3 =~ '\bssh\b' ]] || return
  [[ -n "$SSH_AGENT_PID" && -e "/proc/$SSH_AGENT_PID" ]] \
    && ssh-add -l >/dev/null && return
  eval `keychain --eval id_dsa --timeout 60`
}    
autoload -U add-zsh-hook
add-zsh-hook preexec check_ssh

여기서 일어나는 일은 명령을 입력할 때마다 check_ssh명령이 실행되기 전에 호출된다는 것입니다.

함수의 첫 번째 줄은 확장 명령이 sshZsh 정규식을 사용하는지 여부를 확인합니다. 양쪽에 ssh단어 경계가 있어야 합니다 . \b찾을 수 없으면 함수가 반환됩니다.

다음 줄에서는 SSH 에이전트 프로세스가 환경 변수에 존재하고 프로세스 테이블에도 여전히 존재하는지 확인한 다음 하나 이상의 키가 에이전트에 추가되었는지 확인합니다. 모든 것이 정상이면 SSH 에이전트가 설정되었으며 아무것도 수행할 필요가 없으므로 반환됩니다.

마지막으로 키체인을 시작하고 에이전트를 한 시간 동안 활성 상태로 유지합니다.

git기능을 트리거 하거나 트리거하지 않는 rsync것과 같은 내장된 ssh 항목에 대한 질문은 여전히 ​​남습니다 scp(정규식에 추가할 수 있음).

답변3

zsh의 경우 원하는 작업을 어느 정도 수행하기 위한 유틸리티 및 래퍼 세트를 작성했습니다.https://www.vinc17.net/unix/index.en.html#zsh-ssh-utils

실제로 이는 ssh-agent모든 로그인 세션(데스크톱 또는 SSH를 통해)에서 공유되므로 GNU 화면은 로그인 셸(예: 파일에서 shell -zsh) 을 실행하는 경우에도 지원되며 ~/.screenrc마지막 세션이 종료되는 경우에만 지원됩니다.

참고: 저는 모든 키에 하나의 비밀번호만 사용합니다. 다른 비밀번호를 사용하면 어떤 동작이 발생하는지 잘 모르겠습니다. 일부 변경이 필요할 수 있습니다.

관련 정보