如何设置 SSH 以便不需要输入密码,也不使用公钥?

如何设置 SSH 以便不需要输入密码,也不使用公钥?

我知道这里有几十个关于如何连接到 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 服务器托管。)

请尝试按照以下步骤操作:

  1. 登录 Kerberos。(如果系统尚未包含和工具,则它们可能位于“krb5-user”或类似软件包中。kinitklist

    基尼特您的用户名@dce.psu.edu
    

    如果没有显示错误,则表示登录成功。klist应该显示“ krbtgt/dce.psu.edu@...”项。

  2. 现在连接到 SSH 服务器,并使用-vv选项;如果身份验证成功,那就好了。

    如果没有,你可能需要编辑你的/etc/krb5.conf文件。在[domain_realm]部分下,添加以下内容:

    [domain_realm]
        .psu.edu = dce.psu.edu
    
  3. 使用默认的 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正是出于这个原因而设置的。

相关内容