SSH를 사용할 때 호스트 기반 인증의 호스트 이름 문제

SSH를 사용할 때 호스트 기반 인증의 호스트 이름 문제

이제 우리 팀은 SSH 공개 키 인증을 통해 서버에 연결할 수 있습니다. 각 팀원은 자신의 PC에 개인 키를 갖고 ~/.ssh/있으며 공개 키는 서버의 파일에 있습니다 authorized_key.

각 팀원에게 할당된 PC에서만 서버에 대한 SSH 연결을 승인하도록 요청되었습니다.

실제로 이제 팀 구성원이 해당 컴퓨터에 대한 루트 액세스 권한이 없더라도 이론적으로는 홈 폴더에서 개인 키를 복사하고 이를 다른 컴퓨터에서 사용하여 서버에 연결할 수 있습니다. 그래서 내 질문은 이것을 수행하는 방법입니다.

나는 많은 문서를 읽고 나에게 가장 적합한 것이 무엇인지 테스트했습니다.호스트 기반 인증.

이것이 내 문제에 대한 완벽한 해결책인 것 같습니다. 각 PC에는 /etc/ssh/루트가 아닌 사용자가 읽을 수 없고 기존 공개 키 인증 구성에 추가하여 인증을 호스트하는 데 사용되는 개인 키가 있습니다.

내가 겪고 있는 문제는 SSH 클라이언트가 서버로 보내는 호스트 이름에 있습니다. 내가 연결된 네트워크에 따라 전송되는 호스트 이름이 fooMachine.localdomain, fooMachine.home, 이라는 것을 확인했습니다 fooMachine.

이용 ssh -vvv user@ip하고 살펴보니

debug2: userauth_hostbased: chost ...

이것을 주목하세요.

PC가 항상 동일한 네트워크에서 SSH 서버에 연결되는 것은 아니며 VPN이나 ​​고정 IP가 없습니다.

fooMachine.localdomain따라서 이것이 의미하는 바는 SSH 서버에서 여러 번( , fooMachine.home, ) 연결하도록 호스트를 선언해야 하며 fooMachine네트워크에 연결한 후 다른 접미사를 갖게 되어 fooMachine연결할 수 없는 일이 발생할 수 있다는 것입니다. 내 서버에 연결하세요.

이 문제를 어떻게 해결할 수 있나요? 아니면 내가 뭔가 잘못하고 있는 걸까요?

fooMachine.test.com재부팅 후에도 hostname --fqdn표시된 SSH 클라이언트 fooMachine.test.com에서 사용하는 호스트 이름은 여전히 ​​동일합니다 fooMachine.localdomain.

또한 서버에 연결할 호스트를 선언한 SSH 서버의 shosts.equiv 파일에서 와일드카드를 시도했지만 작동하지 않았습니다. 읽고 나서소스 코드이는 와일드카드( +rhosts 스타일 파일의 경우)가 무시되기 때문에 의미가 있습니다.

답변1

특정 개인 키로 인증을 시도할 때 허용되는 사항에 대한 제한을 추가하는 일반적인 방법은 다음과 같습니다. ~/.ssh/authorized_keysfrom="pattern-list"서버의 파일 - 특히 사용 사례에 맞게 이 옵션을 사용하여 특정 키 쌍을 사용할 수 있는 호스트를 구성/제한하는 기능입니다 .

예를 들어:

# ~/.ssh/.authorized_keys
from="10.80.0.0/14,192.168.1.2,hbruijns-workstation.internal.example.com" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault

예를 들어, 일치하는 개인 키를 사용하여 hbruijns-workstation.internal.example.comIP 주소 192.168.1.2및/또는 범위 내의 모든 IP 주소 에서만 로그인을 허용합니다 10.80.0.0/14.

추가 개선 사항으로 ~/.ssh/.authorized_keys를 서버 관리자의 제어 하에 두어 팀 구성원이 이 제한을 무시할 수 없도록 할 수 있습니다.

제가 이미 언급했고 귀하도 언급한 것처럼 네트워크가 신뢰할 수 있는 클라이언트에 의존하는 보안 모델을 구현하기 위한 전제 조건을 지원하지 않는 경우 이는 별로 도움이 되지 않습니다.

  • 신뢰할 수 있는 고객을 식별할 수 있는 안정적인 방법이 필요합니다.

클라이언트에 고정 IP 및/또는 호스트 이름이 할당되어 있지 않으면 이 방법은 작동하지 않습니다(다른 방법도 마찬가지임).

그래서 요청"각 팀원에게 할당된 PC에서만 서버에 대한 SSH 연결을 승인합니다." 팀 구성원 PC에 필요한 고정 IP 주소 할당을 얻거나 팀 구성원이 VPN을 통해 연결할 수 있는 관리 네트워크 등의 요청은 거부되거나 거부되어야 합니다.

답변2

문제를 해결하는 한 가지 방법은 SSH 클라이언트 구성 파일( /etc/ssh/ssh_config또는 ~/.ssh/config)의 SendEnv 옵션을 사용하여 호스트 기반 인증에 사용할 호스트 이름이 포함된 사용자 정의 환경 변수를 보내는 것입니다. 서버 측에서는 AcceptEnvSSH 데몬 구성 파일( ) /etc/ssh/sshd_config의 옵션을 사용하여 이 환경 변수를 적용 할 수 있습니다.

이를 수행하는 방법의 예는 다음과 같습니다.

각 클라이언트 컴퓨터에서 SSH 클라이언트 구성 파일( /etc/ssh/ssh_config or ~/.ssh/config)을 편집하고 다음 줄을 추가합니다.

Host *
    SendEnv MY_HOSTNAME

각 클라이언트 컴퓨터에서 MY_HOSTNAME 환경 변수를 원하는 호스트 이름으로 설정합니다. 사용자의 셸 프로필(예: ~/.bashrc또는 )에 다음 줄을 추가하면 ~/.zshrc됩니다 .

export MY_HOSTNAME=fooMachine.test.com

서버에서 SSH 데몬 구성 파일( /etc/ssh/sshd_config)을 편집하고 다음 줄을 추가합니다.

AcceptEnv MY_HOSTNAME

서버에서 SSH 데몬을 다시 시작하여 변경 사항을 적용합니다. 이러한 단계를 완료한 후 사용자가 SSH를 사용하여 서버에 연결하면 MY_HOSTNAME환경 변수가 서버로 전송되어 호스트 기반 인증에 사용할 수 있습니다.

관련 정보