ssh 클라이언트가 찾을 수있는 모든 공개 키를 제공하지 못하게 하시겠습니까?


32

대부분의 시스템 관리자와 마찬가지로 항상 openssh를 사용합니다. 약 12 개의 ssh 키가 있으며 각 호스트마다 다른 ssh 키를 갖고 싶습니다. 그러나 처음으로 호스트에 연결할 때 문제가 발생하며 내가 가진 모든 것은 암호입니다. 이 경우 ssh 키가없는 암호를 사용하여 호스트에 연결하고 싶습니다. 그러나 ssh 클라이언트는 내 모든 공개 키를 제공 할 것입니다 ~/.ssh/(의 출력을 보면 알 수 있습니다 ssh -v). 너무 많아 인증 실패로 인해 연결이 끊어집니다.

내 ssh 클라이언트에게 모든 ssh 키를 제공하지 않도록 지시하는 방법이 있습니까?


2
각 호스트마다 다른 키를 원하는 이유는 무엇입니까? 단일 관리 도메인 내에서 호스트간에 키를 공유 할 수도 있습니다. 분명히 업무용 컴퓨터에는 하나의 키를, 개인용 컴퓨터에는 다른 하나의 키를 사용하지만, 작업중인 각 컴퓨터에 대해 별도의 키를 사용하는 논리는 무엇입니까?
Alex Holst

@AlexHolst 많은 키를 사용하고 있습니다. 내부 인프라에 대해 암호화 된 기본 암호 (암호를 입력해야 함)가 있습니다. 에이전트를 사용할 수 없거나 1 분마다 암호를 입력하려고하는 특정 서비스에 사용하는 암호화되지 않은 (비밀번호없이) 다른 서비스가 있습니다. 내부 인프라에 속하지 않은 연결을위한 다른 사람이 있습니다. 누군가가 공개 키에서 개인 키를 복구하는 것은 매우 어렵지만 수행 할 수 있기 때문에 좋은 방법입니다. 예를 들어 데비안은 몇 년 전에 버그를
Huygens

@Huygens 위험 분석 문서를보고 싶습니다. 여러 SSH 키를 사용해야하지만 명확한 텍스트 키를 사용하는 것이 좋습니다. 링크를 게시 할 수 있습니까?
Alex Holst

@AlexHolst "직접"일 필요는 없습니다. 우선 내 대답은 여러 키 페어가있는 이유에 관한 것이 었습니다. 나는 당신에게 몇 가지를 주었다고 생각합니다. 그 후, 우리 모두는 기발한 일과 그렇지 않은 일을 처리해야합니다. 소프트웨어를 사용할 수 없게 만드는 주요 암호를 계속 묻지 않고 SSH를 통해 데이터를 터널링하는 앱을 사용할 수없는 테스트 시스템이 있습니다. 버전 비 호환성 또는 그렇지 않은 문제로 인한 버그 인 것 같습니다. SSH 로그인에 대한 이메일 알림을 받고 해당 상자에 대한 유일한 로그인입니다. 따라서 위험은 허용됩니다.
Huygens

답변:


31

이것은 man 페이지에 따라 예상되는 동작입니다 ssh_config.

 IdentityFile
         Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
         tion identity is read.  The default is ~/.ssh/identity for protocol
         version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
         protocol version 2.  Additionally, any identities represented by the
         authentication agent will be used for authentication.  

         [...]

         It is possible to have multiple identity files specified in configu‐
         ration files; all these identities will be tried in sequence.  Mul‐
         tiple IdentityFile directives will add to the list of identities
         tried (this behaviour differs from that of other configuration
         directives).

기본적으로 IdentityFiles를 지정 하면 SSH 에이전트가 이미 클라이언트에 제공 한 현재 목록에 키가 추가됩니다.

.ssh/config파일 맨 아래에서이 동작을 재정의 하십시오.

Host *
  IdentitiesOnly yes

호스트 수준에서이 설정을 무시할 수도 있습니다. 예 :

Host foo
  User bar
  IdentityFile /path/to/key
  IdentitiesOnly yes

4
ssh -o "IdentitiesOnly true" -v -A user@host내 키가없는 컴퓨터에 로그인하는 데 사용하는 것을 사용할 수도 있지만 에이전트 전달을 제공하고 싶습니다. ( -v자세한 디버깅의 경우).
eckes

1
@eckes 멋진 팁,하지만이되어서는 안된다는 yes(그리고 true비록)?
aexl

IdentitiesOnly항상 도움이되는 것은 아니며 호스트를 구체적으로 제외해야 할 수도 있습니다. 참조 superuser.com/questions/859661/...
aexl

38

다른 사람들은 구성 기반 솔루션으로 이것을 암시했지만 다음과 같이 명령 줄에서 한 번만 쉽게 수행 할 수 있음을 지적 할 가치가 있습니다.

ssh -o 'PubkeyAuthentication no' myhostname.mydomain

3
완벽한 .. 솔루션 IMHO
drAlberT

1
이것이 올바른 대답이어야합니다.
JM Becker

11

James Sneeringer의 솔루션에 따라 다음 행을 따라 ssh_config를 설정하려고 할 수 있습니다.

Host *.mycompany.com
  IdentityFile .ssh/id_dsa_mycompany_main

Host *.mycustomer.com
  IdentityFile .ssh/id_dsa_mycustomer

Host *
  RSAAuthentication no #this should be up top, avoid ssh1 at all costs
  PubkeyAuthentication no

공통 키가 아닌 많은 컴퓨터에 특정 키를 사용하여 연결하는 경우 고유 한 DNS에 모든 CNAME을 부여하십시오. 모든 고객 시스템에서이 작업을 수행합니다.


2

user23413의 솔루션과 유사하게 특정 호스트 (또는 와일드 카드 패턴)에 대해 공개 키 인증을 모두 비활성화 할 수 있습니다.

Host *.example.org
RSAAuthentication no        # SSHv1
PubkeyAuthentication no     # SSHv2

-1

ssh -i / path / to / key를 사용하여 특정 키 파일을 가리키면 다른 키가 에이전트에로드 된 경우에도 해당 키 파일 만 사용하므로 비밀번호를 입력하라는 메시지가 표시되지 않습니다. ~ / .ssh / config를 편집하고 이와 같은 광고를 할 수도 있습니다.

호스트 foo.example.com
IdentityFile .ssh / id_rsa_foo.example.com

당신은 또한 할 수 있습니다 ...

호스트 * .example.org
IdentityFile .ssh / id_rsa_example.org


목록의 끝에 대상 키를 추가하면 문제가 해결되지 않습니다. IdentitiesOnly그것만으로도
Jo Rhett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.