이제 우리 팀은 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_keys
from="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.com
IP 주소 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 옵션을 사용하여 호스트 기반 인증에 사용할 호스트 이름이 포함된 사용자 정의 환경 변수를 보내는 것입니다. 서버 측에서는 AcceptEnv
SSH 데몬 구성 파일( ) /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
환경 변수가 서버로 전송되어 호스트 기반 인증에 사용할 수 있습니다.