
방화벽 뒤의 네트워크에 액세스하기 위해 요새(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 설정이 괜찮아 보입니다. 발급된 티켓은 전달이 안되는 것 같아요.
libdefaults 섹션
[...]
전달 가능
이 플래그가 설정되면 기본적으로 초기 티켓이 전달 가능해집니다. 이 플래그의 기본값은 false입니다.
답변2
ssh에 대한 -J 옵션의 기능을 오해하고 계신 것 같습니다. 점프 호스트를 사용하여 연결을 프록시하기 위해 최종 대상에 대한 소켓 연결을 생성하지만 최종 대상과 키 및 인증을 협상하는 것은 여전히 원래 호스트입니다. 다음과 같은 경우 더 많은 행운이 있을 수 있습니다.
ssh -t jumphost 'ssh -t login'