
RHEL6에서 sssd를 사용하여 Active Directory Kerberos를 인증하도록 몇 개의 Linux 서버를 구성했습니다. 또한 비밀번호 없는 로그인을 위해 GSSAPI 인증을 활성화했습니다.
하지만 비밀번호 없이 Putty(0.63)를 인증할 수는 없는 것 같습니다.
GSSAPI는 .ssh/config 설정을 사용하여 GSSAPI를 활성화하여 AD 인증용으로 구성된 Linux 시스템(openSSH 클라이언트) 간에 작동합니다.
또한 동일한 .ssh/config 설정을 사용하고 kinit 명령을 실행하여 티켓을 가져오는 Cygwin(openSSH 클라이언트)에서도 작동합니다.
또한 홈 디렉토리를 포함한 모든 Linux 시스템의 Samba 공유는 비밀번호 없이 Windows 탐색기에서 작동합니다(GSSAPI가 거기에서 작동하는지 잘 모르겠습니다).
이 문제를 해결하려면 어떤 방법을 시도해 볼 수 있나요? 대부분의 사용자는 Putty를 사용합니다. 또한 저는 Windows 관리자가 아니므로 도메인 컨트롤러에서 아무 것도 할 수 없습니다. 내 계정에는 AD 도메인에 서버를 추가할 수 있는 권한만 있습니다.
Putty SSH 패킷 로깅을 켰습니다. 나는 이런 종류의 내용이 흥미롭다고 생각했지만 아직 이 정보를 어떻게 처리해야 할지 잘 모르겠습니다.
Event Log: Server version: SSH-2.0-OpenSSH_5.3
Event Log: Using SSH protocol version 2
Event Log: We claim version: SSH-2.0-PuTTY_Release_0.63
Outgoing packet #0x0, type 20 / 0x14 (SSH2_MSG_KEXINIT)
Incoming packet #0x0, type 20 / 0x14 (SSH2_MSG_KEXINIT)
Event Log: Doing Diffie-Hellman group exchange
Outgoing packet #0x1, type 30 / 0x1e (SSH2_MSG_KEX_DH_GEX_REQUEST)
Incoming packet #0x1, type 31 / 0x1f (SSH2_MSG_KEX_DH_GEX_GROUP)
Event Log: Doing Diffie-Hellman key exchange with hash SHA-256
Outgoing packet #0x2, type 32 / 0x20 (SSH2_MSG_KEX_DH_GEX_INIT)
Incoming packet #0x2, type 33 / 0x21 (SSH2_MSG_KEX_DH_GEX_REPLY)
Outgoing packet #0x3, type 21 / 0x15 (SSH2_MSG_NEWKEYS)
Event Log: Initialised AES-256 SDCTR client->server encryption
Event Log: Initialised HMAC-SHA1 client->server MAC algorithm
Outgoing raw data at 2014-11-25 00:21:08
Incoming packet #0x3, type 21 / 0x15 (SSH2_MSG_NEWKEYS)
Event Log: Initialised AES-256 SDCTR server->client encryption
Event Log: Initialised HMAC-SHA1 server->client MAC algorithm
Outgoing packet #0x4, type 5 / 0x05 (SSH2_MSG_SERVICE_REQUEST)
Incoming packet #0x6, type 51 / 0x33 (SSH2_MSG_USERAUTH_FAILURE)
...%gssapi-keyex
,gssapi-with-mic
,password.
Event Log: Using SSPI from SECUR32.DLL
Event Log: Attempting GSSAPI authentication
Outgoing packet #0x6, type 50 / 0x32 (SSH2_MSG_USERAUTH_REQUEST)
Incoming packet #0x7, type 60 / 0x3c (SSH2_MSG_USERAUTH_GSSAPI_RESPONSE)
Event Log: GSSAPI authentication initialised
Outgoing packet #0x7, type 61 / 0x3d (SSH2_MSG_USERAUTH_GSSAPI_TOKEN)
Incoming packet #0x8, type 61 / 0x3d (SSH2_MSG_USERAUTH_GSSAPI_TOKEN)
Event Log: GSSAPI authentication initialised
Event Log: GSSAPI authentication loop finished OK
Outgoing packet #0x8, type 66 / 0x42 (SSH2_MSG_USERAUTH_GSSAPI_MIC)
Incoming packet #0x9, type 51 / 0x33 (SSH2_MSG_USERAUTH_FAILURE)
...%gssapi-keyex
,gssapi-with-mic
,password.
답변1
Active Directory 도메인의 일부인 Windows 시스템에서 사용자는 Windows에 로그인할 때 Kerberos 티켓 부여 티켓을 받으며, PuTTY 구성 Connection|SSH|Auth|GSSAPI에서 GSSAPI 인증이 활성화된 경우 PuTTY는 이를 인증에 사용할 수 있습니다. (그리고 Pageant를 통한 공개 키와 같이 GSSAPI 이전에 시도하는 기타 인증 방법은 Connection|SSH|Auth에서 설정되거나 비활성화되지 않습니다.)
[티켓 위임도 필요한 경우(예: 로그인 후 서버에 Kerberos화된 파일 시스템을 마운트하기 위해) PuTTY에서도 GSSAPI 위임이 활성화되어 있는지 확인하세요.그리고로그인한 서버는 Active Directory의 위임 탭에 "모든 서비스에 대한 위임을 위해 이 컴퓨터를 신뢰합니다(Kerberos만 해당).", 이는 기본적으로는 아닙니다. AD의 후자 신뢰 설정은 이상하게도 PuTTY와 같은 Windows 클라이언트에서 위임이 작동하는 경우에만 필요하며 Linux "ssh -K" 클라이언트에는 필요하지 않습니다.]
Active Directory 도메인의 일부가 아닌 자체 관리형(개인) Windows 시스템에서는 PuTTY를 통해 Kerberos/GSSAPI 인증(및 티켓 위임)을 계속 사용할 수 있지만 티켓을 직접 받아야 합니다. 불행하게도 Windows 7에는 kinit 프로그램(티켓을 수동으로 요청할 수 있는 프로그램)이 설치되어 있지 않으며 PuTTY는 티켓이 없는 경우에도 Kerberos 비밀번호를 묻는 메시지를 표시하지 않습니다. 그러므로, 다음을 설치해야 합니다.Windows용 MIT Kerberos이 패키지에는 일반적인 kinit/klist/kdestroy 명령줄 도구와 깔끔한 GUI 도구인 "MIT Kerberos Ticket Manager"가 모두 포함되어 있습니다. 이를 사용하여 티켓을 얻으면 PuTTY가 자동으로 Microsoft SSPI 라이브러리 대신 MIT GSSAPI 라이브러리를 사용하고 모두 작동합니다. "MIT Kerberos Ticket Manager"가 실행 중인 경우 PuTTY에 티켓이 필요할 때 자동으로 Kerberos 비밀번호를 묻는 메시지가 표시되므로 시작 폴더에서 연결하는 것이 좋습니다.
업데이트:Windows 10 버전 21H1 및 Windows Server 2022부터Windows용 OpenSSH(버전 8.1 이상) Windows에 내장된 클라이언트 및 서버도 이제 GSSAPI 인증 및 위임(예: ssh -K
)을 지원합니다. 따라서 필요한 것이 그것뿐이라면 2021년부터는 더 이상 PuTTY 및 MIT Kerberos를 설치할 필요가 없습니다.
답변2
먼저 PuTTY를 실행하는 Windows 상자의 klist 출력에 유효한 TGT가 표시되는지 다시 확인하세요. 그런 다음 PuTTY 세션 구성에서 다음을 확인하세요.GSSAPI 인증 시도에서 활성화되었습니다 Connection - SSH - Auth - GSSAPI
. 마지막으로 에서 자동으로 사용자 이름으로 로그인하도록 구성되어 있는지 확인하세요 Connection - Data
. 사용자 이름을 명시적으로 지정하거나 라디오 버튼을 선택할 수 있습니다.시스템 사용자 이름 사용.
지금까지 Kerberos를 통해 암호 없는 SSH 로그인 작업을 수행하기 위해 수행한 작업은 이것이 전부였습니다.
답변3
문제는 Windows Kerberos 설정에 있었습니다. 우리 Active Directory가 이상하게 설정되어 있는 것 같은데 제가 Windows 관리자가 아닌지는 잘 모르겠습니다.
하지만 Windows 7 CLI에서 ksetup을 사용하여 Kerberos를 수동으로 구성하여 문제를 해결했습니다.
원격 워크스테이션을 재부팅한 후 PC에 로그인할 수 없습니다. 그 이유는 원래 구성에서는 내 영역 도메인의 TLD 부분이 항상 없었기 때문입니다(도메인\사용자). 하지만 수동으로 구성한 후에는 전체 영역 도메인 이름(domain.TLD\user)을 반영하도록 로그인 도메인을 변경해야 했고, 지금은 인증하는 데 시간이 더 오래 걸리는 것 같지만 Windows PC에 로그인할 수 있었습니다.
변경 전에는 ksetup의 출력에 기본 영역만 표시되었으며 소문자였습니다.
내 영역에 대한 모든 kdc 서버를 가져오기 위해 " nslookup -type=SRV _kerberos._tcp.domain.TLD "를 사용했습니다.
나는 어떤 플래그도 설정하지 않았습니다.
내 사용자 이름을 매핑하도록 설정했습니다. " ksetup /mapuser[이메일 보호됨]사용자 "
내가 사용한 리소스: https://wiki.ncsa.illinois.edu/display/ITS/Windows+7+Kerberos+Login+using+External+Kerberos+KDC
https://www.cgl.ucsf.edu/Security/CGLAUTH/CGLAUTH.html
누구든지 Windows 관리자에게 이 문제를 해결할 수 있는 방법에 대해 제안할 수 있는 내용이 있으면(고장났나요?) 전달하겠습니다.