SSH-Jumphost 설정 | freeIPA 및 Kerberos 티켓을 사용한 Proxyjump

SSH-Jumphost 설정 | freeIPA 및 Kerberos 티켓을 사용한 Proxyjump

방화벽 뒤의 네트워크에 액세스하기 위해 요새(ssh 점프 호스트)를 설정하고 싶습니다. 두 서버 모두 freeIPA 도메인에 있습니다. 클라이언트는 사용자 시스템이며 IPA 도메인의 일부가 아닙니다.

인터넷/클라이언트 —> SSH-Jumphost —> 로그인 노드

내 계획은 자격 증명을 통해 ssh-jumphost에 로그인하여 유효한 TGT를 얻은 다음 얻은 kerberos 티켓을 통해 로그인 서버에 ssh를 연결하는 것입니다.

따라서 GSSAPI-Credentials가 전달되도록 허용되는 ssh 및 sshd 구성을 변경했습니다.

# IPA-related configuration changes to sshd_config

PubkeyAuthentication yes
KerberosAuthentication no
GSSAPIAuthentication yes
UsePAM yes
ChallengeResponseAuthentication yes
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody

# added
PasswordAuthentication no

SSH 구성은 다음과 같습니다.

# IPA-related configuration changes to ssh_config
#
PubkeyAuthentication yes
GlobalKnownHostsFile /var/lib/sss/pubconf/known_hosts
#VerifyHostKeyDNS yes

# assumes that if a user does not have shell (/sbin/nologin),
# this will return nonzero exit code and proxy command will be ignored
Match exec true
        ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h


#added 
GSSAPIAuthentication yes
GSSAPITrustDns yes
GSSAPIKeyExchange yes
GSSAPIRenewalForcesRekey yes
Host login
    GSSAPIDelegateCredentials yes

SSH를 사용하여 Jumphost에 로그인하면 유효한 Kerberos 티켓을 받습니다. 그 후에는 자격 증명을 입력하지 않고도 SSH로 로그인할 수 있습니다.

 $(j@client) ssh jumphost
(USER@jumphost) password:
$(@jumphost) klist
Credential-Cache: KCM:1791600003:19884
Standard-Principal: user@REALM

Valid starting       Expires              Service principal
22.11.2022 17:45:38  23.11.2022 17:35:51  krbtgt/REALM@REALM
$(@jumphost) ssh login

$(@login) klist
Credential-Cache: KCM:1791600003:66779
Standard-Principal: user@REALM

Valid starting       Expires              Service principal
22.11.2022 17:47:51  23.11.2022 17:35:51  krbtgt/REALM@REALM

하지만 한 단계로 이 작업을 수행하려면 모든 서버에 대한 자격 증명을 입력해야 합니다.

$(@client) ssh -J jumphost login
(user@jumphost) Password: 
(user@login) Password: 

그 후 로그인했고 유효한 TGT가 있는데 왜 비밀번호를 두 번 입력해야 하는지 모르겠습니다.

비밀번호를 한 번만 입력하도록 하고 싶습니다.

클라이언트에서도 다른 SSH 구성을 사용하여 이것을 시도했습니다.

Host login
  User USER
  #GSSAPIAuthentication yes
  #GSSAPIDelegateCredentials yes
  HostName login
  ProxyJump USER@jumphost

GSSAPI 옵션 유무.

Host jumphost
  User USER
  HostName jumphost

Host login
  User USER
  #GSSAPIAuthentication yes
  #GSSAPIDelegateCredentials yes
  HostName login
  ProxyJump jumphost

GSSAPI 옵션 유무.

모든 버전에서는 비밀번호를 두 번 제공해야 하는 경우가 발생합니다.

내가 무엇을 놓치고 있나요?

편집: krb5.conf 추가

#File modified by ipa-client-install

includedir /etc/krb5.conf.d/
includedir /var/lib/sss/pubconf/krb5.include.d/

[libdefaults]
  default_realm = RELAM
  dns_lookup_realm = true
  rdns = false
  dns_canonicalize_hostname = false
  dns_lookup_kdc = true
  ticket_lifetime = 24h
  forwardable = true
  udp_preference_limit = 0
  default_ccache_name = KEYRING:persistent:%{uid}


[realms]
  REALM = {
    pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
    pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem

  }

[domain_realm]
  .realm.com = REALM
  realm.com = REALM
  jumphost.realm.com = REALM

/etc/krb5.conf.d 아래에 다음 파일이 있습니다.

crypto-policies  freeipa  kcm_default_ccache  sssd_enable_idp

답변1

편집하다제가 틀렸나봐요 :-)

SSH 설정이 괜찮아 보입니다. 발급된 티켓은 전달이 안되는 것 같아요.

인용man 5 krb5.conf:

libdefaults 섹션

[...]
전달 가능
이 플래그가 설정되면 기본적으로 초기 티켓이 전달 가능해집니다. 이 플래그의 기본값은 false입니다.

답변2

ssh에 대한 -J 옵션의 기능을 오해하고 계신 것 같습니다. 점프 호스트를 사용하여 연결을 프록시하기 위해 최종 대상에 대한 소켓 연결을 생성하지만 최종 대상과 키 및 인증을 협상하는 것은 여전히 ​​원래 호스트입니다. 다음과 같은 경우 더 많은 행운이 있을 수 있습니다.

ssh -t jumphost 'ssh -t login'

관련 정보