키가 이미있는 경우 ssh-add를 조용히하십시오.


16

ssh-add /path/to/special_key스크립트 상단에 넣고 싶습니다 . 이것은 잘 작동하지만 항상 암호 문구를 요구합니다. ssh-add -l키가 이미 추가 된 것을 보여 주더라도 여전히 암호 문구를 요구하기 때문에 이것은 이상하고 약간 성가시다 .

"이 키를 추가하고 암호가 아직 추가되지 않은 경우 묻지 않으면 아무 것도하지 마십시오"라고 알려주는 방법이 있습니까?


답변:


20

원하는 결과를 얻는 데 도움이되는 ssh-add 옵션이 보이지 않지만 특히 하나의 키에 관심이 있다면이 문제를 해결하는 것이 쉽습니다.

먼저 special_key의 지문을 가져옵니다.

ssh-keygen -lf /path/to/special_key  | awk '{print $2}'

이 지문이 6d : 98 : ed : 8c : 07 : 07 : fe : 57 : bb : 19 : 12 : 89 : 5a : c4 : bf : 25와 같다고 가정하겠습니다.

그런 다음 스크립트 상단에서 ssh-add -l키를 추가하라는 메시지가 표시되기 전에 키를로드했는지 확인하십시오.

ssh-add -l |grep -q 6d:98:ed:8c:07:07:fe:57:bb:19:12:89:5a:c4:bf:25 || ssh-add /path/to/special_key

원하는 경우이 모든 것을 한 줄로 접을 수 있습니다.

ssh-add -l |grep -q `ssh-keygen -lf /path/to/special_key  | awk '{print $2}'` || ssh-add /path/to/special_key

원 라이너가 잘 작동합니다, 감사합니다!
대런 쿡

1
이 간단한 한 줄짜리가 좀 더 이해 ssh-keygen하기 ssh-add -l | grep -q 'path/to/key' || ssh-add /path/to/key
쉬우 며

1
ssh-keygen대답에서 키를 생성하지 않습니다- ssh-add -l귀하의 예제 와 동일하게 실제로 아무것도 추가하지 않습니다. 플래그는 이름과 정확히 일치하지 않도록 명령의 동작을 수정합니다. 이러한 버전은 기능적으로 다릅니다. 경로별로 확인하고 해당 경로의 키가 변경되면 버전이 선택되지 않습니다. 답변의 버전은 또한 어디에서로드했는지에 관계없이 기존 키를 감지합니다.
Richlv

5

이 단지 사용하여 확인하는 직접적인 방법은 없습니다 ssh-add하지만 당신은 사용할 수 있습니다 ssh-keygen및 확인하려면 몇 가지 스크립트.

$ if  ssh-add -l | \
    grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
    then echo yes; \
    else echo no; \
  fi

yes파일 /path/to/special_key로 표시된 지문이 ssh-add -l의 출력 에 존재 하면 위의 내용이 인쇄 됩니다 .

$ if  ssh-add -l | \
    grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
    then echo yes; \
    else echo no; \
  fi
yes

출력 내용은 ssh-keygen -lf /path/to/special_key다음과 같습니다.

$ ssh-keygen -lf /path/to/special_key
2048 8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c  dev-servers (RSA)

그리고 'awk'{print $ 2} '를 사용하여 지문을 포함하는 두 번째 열만 선택합니다.

8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c

참고 문헌


3

ssh-add명시 적으로 사용해야하는 특별한 이유가있을 수 있지만 "키를 처음 사용할 때 암호를 입력하라는 메시지가 표시되지만 그 이후가 아니라"를 원하면 openssh가 더 간단한 해결책을 제공합니다.

넣어 AddKeysToAgent yes당신의 .ssh/config파일.


감사. 그것은 분명히 ssh 7.2에 추가되었습니다 (Ubuntu 18은 버전 7.6에있는 것으로 보입니다).
대런 쿡

예, "AddKeysToAgent는 내 openssh 버전에서 지원되지 않습니다"는 ssh-add를 명시 적으로 사용해야하는 좋은 이유입니다. ;-)
Nate

0

ssh-add -K FILEMac에서 나를 위해 잘 작동했습니다.
"Identity added :"행은 계속 표시되지만 암호를 요구하지는 않습니다.

매뉴얼 페이지에서 :

-K 아이덴티티를 추가 할 때 각 패스 프레이즈는 사용자의 키 체인에도 저장됩니다. -d를 사용하여 ID를 제거하면 각 암호가 제거됩니다.

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