我使用以下方式连接到我的远程服务器:
ssh -At [email protected] ssh -At [email protected]
下面只要求我输入一次密码。我的电脑上没有任何身份验证文件,只需要密码。
我想创建一个config
文件,因此我通过执行 进行连接ssh slurm
。我需要它来处理一些不支持-At
s 的软件,它们只接受一个 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 进行身份验证。此时,sshd
target.edu 上的守护进程将连接从原始客户端转发到目标主机。这还会将身份验证从代理主机转移到原始客户端,提示输入 slurm.target.edu 服务器的密码。
我建议不要对两者都使用密码,而是研究对两者都使用 ssh 公钥认证的可能性。
答案2
正如 Tomek 所解释的那样,第二个 SSH 客户端在不同的环境中运行。使用“命令”方法,会发生以下情况:
- 您使用“密码”验证连接到服务器 1。
- 服务器 1 使用 pam_krb5 并为您检索 Kerberos TGT 票证。
- 从服务器 1,使用“Kerberos”身份验证连接到服务器 2。
使用 ProxyJump,两个客户端都处于相同的本地状态,因此第 2 步中检索到的票证毫无用处,因为它会被存储起来在服务器 1 上但第二个客户端没有在那里运行。
解决此问题的一种方法是使用 Kerberos全部的通过使用kinit
获取票证的过程 - 它将允许您向该网络上的所有系统进行身份验证:
使用以下方式获取门票:
$ kinit [email protected]
(领域名称区分大小写,并且几乎总是大写。)
用于
klist -f
检查您有哪些票。在 SSH 中启用 Kerberos 身份验证(以及票证转发,因为您使用的特定系统可能需要它才能访问文件存储):
Host *.mit.edu GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
Kerberos 票证有效期为 10 小时;kinit -r 7d
将允许您使用 获得可续订的票证,无需密码即可延长kinit -R
。您可以使用各种方法,例如k5start
或 GNOME 的 Kerberos 集成来每天自动获取票证。