使用 Kerberos 为远程服务器进行 SSH 配置

使用 Kerberos 为远程服务器进行 SSH 配置

我使用以下方式连接到我的远程服务器:

ssh -At [email protected] ssh -At [email protected]

下面只要求我输入一次密码。我的电脑上没有任何身份验证文件,只需要密码。

我想创建一个config文件,因此我通过执行 进行连接ssh slurm。我需要它来处理一些不支持-Ats 的软件,它们只接受一个 ssh 名称。

我尝试了这个配置:

Host csail
  HostName target.edu
  User user
  ForwardAgent yes
  
Host slurm
    HostName slurm.target.edu
    User user
    ProxyJump csail

这个配置有效,但令人惊讶的是它两次要求我输入密码!一次又一次。(两次要求输入相同的密码!)

为了解决这个问题,我尝试了一下,发现系统似乎使用了一种target.edu叫做slurm.target.edu凯尔伯罗斯这可能是问题的潜在原因。

我来这里是想问一下是否有任何方法可以修改我的配置文件,以便我只需使用密码 ssh 一次即可。

PS 请注意,我无法控制登录方法。我无法更改任何身份验证策略。

答案1

这是因为命令行版本的工作方式与ProxyJump版本不同,是的,这可能会为命令行启用 Kerberos,但不为 启用ProxyJump

我的情况是:

ssh -At [email protected] ssh -At [email protected]

第一个ssh连接到 target.edu,进行身份验证user(此时可能获得 Kerberos 票证)并分配终端,启动 shell 并ssh在那里启动另一个客户端。所述客户端可以使用 Kerberos 票证对 slurm.target.edu 主机进行身份验证,因此这里没有密码提示。

在另一种情况下,第二个ssh客户端未启动,因此无法使用 Kerberos 进行身份验证。此时,sshdtarget.edu 上的守护进程将连接从原始客户端转发到目标主机。这还会将身份验证从代理主机转移到原始客户端,提示输入 slurm.target.edu 服务器的密码。

我建议不要对两者都使用密码,而是研究对两者都使用 ssh 公钥认证的可能性。

答案2

正如 Tomek 所解释的那样,第二个 SSH 客户端在不同的环境中运行。使用“命令”方法,会发生以下情况:

  1. 您使用“密码”验证连接到服务器 1。
  2. 服务器 1 使用 pam_krb5 并为您检索 Kerberos TGT 票证。
  3. 从服务器 1,使用“Kerberos”身份验证连接到服务器 2。

使用 ProxyJump,两个客户端都处于相同的本地状态,因此第 2 步中检索到的票证毫无用处,因为它会被存储起来在服务器 1 上但第二个客户端没有在那里运行。

解决此问题的一种方法是使用 Kerberos全部的通过使用kinit获取票证的过程 - 它将允许您向该网络上的所有系统进行身份验证:

  1. 使用以下方式获取门票:

    $ kinit [email protected]
    

    (领域名称区分大小写,并且几乎总是大写。)

    用于klist -f检查您有哪些票。

  2. 在 SSH 中启用 Kerberos 身份验证(以及票证转发,因为您使用的特定系统可能需要它才能访问文件存储):

    Host *.mit.edu
        GSSAPIAuthentication yes
        GSSAPIDelegateCredentials yes
    

Kerberos 票证有效期为 10 小时;kinit -r 7d将允许您使用 获得可续订的票证,无需密码即可延长kinit -R。您可以使用各种方法,例如k5start或 GNOME 的 Kerberos 集成来每天自动获取票证。

相关内容