SSH-Jumphost のセットアップ | freeIPA と Kerberos-Tickets を使用した Proxyjump

SSH-Jumphost のセットアップ | freeIPA と Kerberos-Tickets を使用した Proxyjump

ファイアウォールの背後にあるネットワークにアクセスするために、要塞 (ssh ジャンプホスト) をセットアップしたいと考えています。両方のサーバーは freeIPA ドメインにあります。クライアントはユーザー マシンであり、IPA ドメインの一部ではありません。

インターネット/クライアント —> SSH-Jumphost —> ログインノード

私の計画は、資格情報を使用して ssh-jumphost にログインし、有効な TGT を取得し、取得した Kerberos チケットを使用してログイン サーバーに ssh することです。

そのため、GSSAPI 資格情報の転送が許可されるように 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を使用してジャンプホストにログインすると、有効な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

しかし、これを 1 つのステップで実行しようとすると、すべてのサーバーの資格情報を入力する必要があります。

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

その後、ログインして有効な TGT を取得しましたが、なぜパスワードを 2 回入力する必要があるのか​​わかりません。

パスワードの入力を強制するのは 1 回だけにしたいです。

クライアント上のさまざまな 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 オプションの有無。

どのバージョンでも、パスワードを 2 回入力する必要があります。

何が足りないのでしょうか?

編集: 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'

関連情報