我知道这里有几十个关于如何连接到 SSH 服务器而不必每次都输入密码,答案总是“使用公钥”。好吧,我发现自己在极少数情况下确实没有选择。出于某种无法解释的原因,我尝试连接的服务器上的 OpenSSH 守护程序配置为
RSAAuthentication no
PubkeyAuthentication no
在 中/etc/ssh/sshd_config
。我没有服务器上的任何管理权限,因此我无法更改这些或任何其他服务器配置选项。(当然,我可以完全控制客户端配置:Linux 上的 OpenSSH 5.8。)
我有哪些选择,特别是最安全的选择,可以避免每次我想通过 SSH 进入该服务器时都必须输入密码?我将自己的计算机保管得相当好,因此,如果确实有必要,我们假设将密码存储在客户端的文件中的安全风险可以接受的低。
服务器可以接受的其他身份验证方法显然是 GSS API(我对此一无所知)、键盘交互(我也对此一无所知)和密码。以下是一些相关的配置选项:
#ChallengeResponseAuthentication yes
#KerberosAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
#UsePAM no
以下是一个调试 ( -vv
) 跟踪:
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure. Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure. Minor code may provide more information
debug1: Unspecified GSS failure. Minor code may provide more information
debug2: we did not send a packet, disable method
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
答案1
在这种情况下,编写(或者更好地记录)一个预期脚本将是您的选择之一。
每个系统都不同,所以不会有脚本,但使用 autoexpect 可以很容易地为此目的录制脚本。
答案2
根据目前收集的信息,该服务器sftp.pass.psu.edu
支持 Kerberos 5(GSSAPI)身份验证并且处于范围内dce.psu.edu
。
Kerberos 是非常在具有许多服务器和工作站的网络上很常见;许多大型教育机构都已安装它。与公钥身份验证相比,它的一个优点是,单一身份验证会kinit
自动向 Kerberos 域中的所有计算机提供凭据,而无需将公钥复制到每台计算机。另一个优点是协议支持 - 相同的 Kerberos 凭据可用于 30 多种协议(邮件、文件系统、数据库...),而不仅仅是 SSH。
(关于“无知的仅限 Windows 的管理员”:该dce.psu.edu
领域实际上似乎基于 Active Directory 并由 Windows 服务器托管。)
请尝试按照以下步骤操作:
登录 Kerberos。(如果系统尚未包含和工具,则它们可能位于“krb5-user”或类似软件包中。
kinit
)klist
基尼特您的用户名@dce.psu.edu
如果没有显示错误,则表示登录成功。
klist
应该显示“krbtgt/dce.psu.edu@...
”项。现在连接到 SSH 服务器,并使用
-vv
选项;如果身份验证成功,那就好了。如果没有,你可能需要编辑你的
/etc/krb5.conf
文件。在[domain_realm]
部分下,添加以下内容:[domain_realm] .psu.edu = dce.psu.edu
使用默认的 Krb5 设置,#1 中获得的票证有效期为 10 小时,可续订长达一周。但是,我无法验证这些设置。
如果您想将密码保存在文件中,一个简单的方法
kinit your_principal < password.txt
就可以了,尽管它并不完全可靠。有了
ktutil
它就可以制作一个“密钥表”代替密码使用。$ ktutil ktutil:addent-密码-p你的主体-k 1 -e aes256-cts-hmac-sha1-96 密码你的主体:********* ktutil: wkt密钥表文件 ktutil: CtrlD
并使用以下方式登录:
$ kinit-kt密钥表文件 你的主体
答案3
我会考虑一个混合解决方案,您只需输入一次密码,计算机就会维护与远程 SSH 服务器的套接字。您可以关注这些步骤ControlMaster
正是出于这个原因而设置的。