ssh-agent가 요청 시 자동으로 키를 추가하도록 만드는 방법은 무엇입니까?

ssh-agent가 요청 시 자동으로 키를 추가하도록 만드는 방법은 무엇입니까?

ssh-agent(최대 수명 옵션 사용)를 실행하고 싶지만 시작 시 키를 추가하지 않고 대신 요청 시 추가합니다.

일부 서버에 처음 로그인할 때와 마찬가지로 암호 문구를 요청해야 하며, 다음 번에는(1시간 이상 기다리지 않는 한) 깔끔하게 연결되어야 합니다.

ssh server1
Enter passphrase for key '/home/vi/.ssh/id_dsa':
server1> ...

ssh server2
server2> # no passphrase this time

# wait for lifetime

ssh server2
Enter passphrase for key '/home/vi/.ssh/id_dsa':

매번 'ssh-add'를 실행하는 것에 대해 수동으로 기억하고 싶지 않습니다. (예: ssh 전용 암호 문구를 입력하고 "아, 기억이 나지 않습니다. 다시 입력해야 합니다.")

사용자가 암호를 제공한 경우 ssh-agent에 키를 자동으로 추가하도록 ssh를 구성하는 방법은 무엇입니까?

답변1

ssh는 처음 사용할 때 에이전트에 키 추가를 지원합니다(버전 7.2부터). 다음을 입력하여 해당 기능을 활성화할 수 있습니다 ~/.ssh/config.

AddKeysToAgent yes

이는 git과 같은 파생 도구를 사용할 때도 작동합니다.

로부터7.2 변경 내역:

  • ssh(1): 'yes', 'no', 'ask' 또는 'confirm'으로 설정할 수 있는 AddKeysToAgent 클라이언트 옵션을 추가하고 기본값은 'no'입니다. 활성화되면 인증 중에 사용되는 개인 키가 실행 중인 경우 ssh-agent에 추가됩니다('confirm'으로 설정된 경우 확인이 활성화됨).

답변2

당신은 속이고 / alias ssh='ssh-add -l || ssh-add && ssh'에 다음과 같은 것을 넣을 수 있습니다 . 이 첫 번째 실행은 0(에이전트에 키가 있음), 1(키 없음) 또는 2(실행 중인 에이전트 없음)를 반환할 수 있습니다. 0을 반환하면 실행됩니다. 1이면 실행되고 ; 2이면 실패하고 실행되지 않습니다. 실행 중인 에이전트가 없을 때에도 실행하려면 를 로 바꾸세요 ..bashrc.profilessh-add -lsshssh-addsshssh-addssh&&;ssh

답변3

.bashrcauto-call-ssh-add가 ssh에서 지원될 때까지 Kovensky 제안을 기반으로 내 에 다음을 추가했습니다 .

ssh-add -l >/dev/null || alias ssh='ssh-add -l >/dev/null || ssh-add && unalias ssh; ssh'

별칭은 ID가 추가되지 않은 경우에만 생성되며 별칭은 실행되면 자체적으로 삭제됩니다.

이런 방식으로 ID가 추가된 후 일반 ssh 명령이 사용됩니다.

답변4

다음 쉘 함수를 사용하고 있습니다.

ssh() {
    local possible_keys=($(/usr/bin/env ssh -G $@ | grep '^identityfile' \
                           | cut -d " " -f 2- | sed -e "s|^~|$HOME|"))
    for k in $possible_keys; do
        if [[ -f $k ]]; then
            local fingerprint=$(ssh-keygen -lf $k)
            ssh-add -l | grep -q "$fingerprint" || ssh-add $k
        fi
    done
    /usr/bin/env ssh $@
    return $?
}

먼저 연결하려는 호스트에 대한 구성을 확인한 다음 해당 호스트에 대한 가능한 키가 아직 추가되지 않은 경우 ssh-agent에 추가하고 마지막으로 호스트에 연결합니다. 개선될 수 있다고 확신하므로 피드백을 받고 싶습니다.

관련 정보