인증 기관을 통한 SSH

인증 기관을 통한 SSH

SSH를 사용하기 위해 서명된 인증서를 사용하려고 합니다. ssh -i keys/client.key대상 장치에 연결하는 데 사용합니다 . 해당 개인 키(with)에서 공개 키를 생성하여 ssh-keygen -y -f keys/client.key.ssh/authorized_keys 파일에 넣으면 문제 없이 연결할 수 있습니다.

내가 하고 싶은 것은 CA를 사용하여 허용하는 것입니다.모두이 사용자로 로그인하기 위해 이 CA에서 서명한 키입니다. 나는 ssh-keygen -y -f keys/ca.key공개 키를 생성하여 "cert-authority sh-rsa AAAB3N....Z"로 authenticate_keys에 넣곤 했습니다. 다른 사이트에서 내가 이해한 바에 따르면 지금은 "작동"해야 하지만 그렇지 않습니다. 클라이언트 측에서는 "권한이 거부되었습니다(공개 키)"라는 메시지가 표시됩니다. 내 파일에 다른 목록이 없습니다 authorized_keys. 서버 측에서는 오류 메시지가 표시되지 않고 클라이언트 연결이 끊어졌다는 메시지만 표시됩니다.

제가 뭔가 간단한 것을 놓치고 있는 걸까요? 작동하지 않는 이유를 어떻게 디버깅할 수 있습니까?

편집 #1

나는 EasyRSA를 사용하여 openssl을 통해 호출되는 일부 쉘 스크립트인 개인 키를 생성하고 있습니다. 개인 키가 생성되고 CSR이 생성된 다음 서명 인증서가 생성되는 것이 문제일 수 있다고 생각합니다. 그래서 나는 개인 키가 어떤 식으로든 "서명"되어 있다고 생각하지 않습니다.

편집 #2

시도해 보았는데 ssh-keygen -s ca.key -I key client.key"do_ca_sign: 'client.key'를 열 수 없습니다."라는 메시지가 표시되었습니다. 새로 생성된 RSA 키로 시도했는데 ssh-keygen잘 작동하니 ca.key도 괜찮은 것 같습니다. openssl이 생성한 개인 키에는 마음에 들지 않는 부분이 있는 것 같습니다.

답변1

  1. 클라이언트에 인증서가 없기 때문에 인증서를 제공하지 않았습니다. ( )을 생성해야 합니다 ssh-keygen -s keys/ca.key -I jruser -n jruser keys/client.key.pub. 새 인증서( keys/client.key_cert.pub)는 서버에서 자동으로 선택되어 ssh서버에 제출됩니다.
  2. 라인 cert-authorityauthorized_keys필수 할당이 누락되었습니다 principals(예 principals="jruser": ).
  3. 디버깅하려면 ssh -v평소처럼 사용할 수 있습니다. 인증서 인증을 사용하는 경우 인증 알고리즘 이름에 "cert"가 포함됩니다.
  4. 이 줄을 작성하는 대신 TrustedUserCAKeys옵션(in )을 사용하는 것이 더 오래되고 잘 테스트된 SSH 사용자 인증서 형식이므로 사용하는 것이 좋습니다 .sshd_configcert-authority

이 기능(및 호스트 키 인증서) 설정에 대한 간결한 안내서는 다음과 같습니다.Ubuntu를 사용하여 호스트와 클라이언트를 인증하기 위해 SSH CA를 만드는 방법.

답변2

여기에는 여러 가지 문제가 있는 것 같습니다.

가장 큰 혼란은 서명입니다사람들개인 키 대신 키. "id_rsa"라는 개인 키에 서명하려고 하면 ssh-keygen은 개인 키를 무시하고 동일한 디렉터리에 있는 "id_rsa.pub"를 ​​사용합니다. 해당 공개 키가 존재하지 않는 경우 존재하지 않는 파일에 서명하려고 하면 동일한 오류 메시지가 표시됩니다.

또한 로그인할 때 "some.key"라는 개인 키를 사용하는 경우 서명 공개 키의 이름은 "some.key-cert.pub"이어야 하며 동일한 디렉터리에 있어야 합니다. 그렇지 않으면 해당 키를 사용하지 않습니다. 전체 공개 키가 작동하지 않습니다.

"주체"는...있는 경우(선택 사항) 실제로 로그인할 수 있는 사용자를 지정합니다. 따라서 주체 서명 공개 키를 사용하는 경우 해당 사용자로 로그인하는 데만 사용할 수 있습니다.

관련 정보