【问题标题】:Asking extra password when using scp使用 scp 时询问额外密码
【发布时间】:2015-02-23 22:47:45
【问题描述】:

我不确定我应该在这里还是在服务器故障中问这个问题,请随时标记问题并在必要时进行迁移。

我有一些服务器,我想添加一个额外的安全层。实际上,我们正在使用带密码的密钥身份验证。

我们购买了一些我想使用的 Yubikeys(OTP 密码生成器)。我创建了一个系统来验证 Yubikey 并且 Yubikey 的所有者被授权登录。为了使用这个系统,我创建了~/.ssh/rc,我要求用户按下 Yubikey,然后我使用远程服务器来验证它。

到目前为止一切顺利,在尝试通过 ssh 登录时效果很好。问题来了:当我尝试 scp 到具有这种额外保护的服务器时,它会引发以下错误:

/dev/tty: No such device or address 

错误是由我要求用户输入 OTP 的行引发的:

read -sp "Press your Yubikey..." OTP < /dev/tty

当我 ssh 从一台服务器到另一台具有这种额外保护的服务器时,不会发生这种情况。

【问题讨论】:

    标签: bash ssh scp tty


    【解决方案1】:

    scp 不会启动交互式会话,因此没有可连接的终端(因此也没有可读取的 /dev/tty)。

    您需要检测到这一点,在这种情况下不要尝试从中读取。

    话虽如此,这可能是错误的做法。 ssh 很可能在您的系统上配置为使用 pam,并且有一个用于 yubikeypam 模块可用于将 yubikey 用作帐户 ssh 身份验证的一部分。有关基本信息,请参阅 https://developers.yubico.com/yubico-pam/

    他们的配置使用 yubikey 作为唯一身份验证,您需要稍微不同地配置 pam 以使其成为额外的必需登录信息。 (当然,假设您希望它适用于 scp 案例,而不是仅仅为 scp 案例跳过它。)

    【讨论】:

    • 感谢您的解释。我没有使用pam 模块的唯一原因是除了验证 yubikey 之外,我还使用数据库来检查 yubikey 所有者是否有登录权限。也许我可以修改 para 模块?
    • 我也会为那个位寻找一个 pam 模块。这就是 pam 堆栈想法的重点。此数据库检查是否与拥有系统帐户分开?您可以为此利用系统帐户(从数据库提供)吗?这也可能是nsswitch.conf/etc 的东西。可能对潜在有用。
    【解决方案2】:

    正如 Etan 所指出的,您确实应该为此使用 PAM。

    请注意,您也不必要求用户按下 Yubikey。 pam_yubico.so 模块将在质询响应之前将您键入的任何内容传递给 PAM 堆栈中的下一个模块。例如,查看pam_unix(8) 中的try_first_pass 标志。

    只需输入密码,不要按回车,然后按 Yubikey。

    您可以实现自己的模块来进行数据库检查。编写 PAM 模块并不难。

    /etc/pam.d/sshd 中的类似内容:

    # auth
    auth        requisite   /usr/local/lib/security/pam_yubico.so id=[yours] key=[yours] authfile=/etc/yubikey_mappings
    auth        required    pam_unix.so     no_warn try_first_pass
    

    尝试登录:

    % slogin hogfather
    YubiKey for `philip': [password][yubikey]
    Last login: Thu Mar  5 01:13:55 2015 from twoflower.trouble.is
    

    【讨论】:

    • 如果我编写自己的 PAM 模块,它是否也适用于非交互式会话?我问是因为我已经让它工作了,当它不是交互式会话时,它根本不要求 yubikey。如果它适用于非交互式会话,我将尝试编写自己的 PAM 模块。
    • 当然。如果您的 PAM 模块仅在设置了某些标志的情况下检入文件或数据库,并且不需要用户输入,则它可以是完全非交互式的。 pam_opieaccess.so 是一个很好的模块示例,它可以执行与您想要的类似的操作
    【解决方案3】:

    好的,您需要 yubikey 身份验证和授权,用于检查是否允许用户登录此服务器。

    您可能想看看privacyIDEA。 这是一个 OTP 身份验证后端。如果你愿意,你甚至可以初始化你的 yubikeys。使用 pam_radius 将认证请求转发给privacyIDEA。 (使用 scp 没有麻烦)。

    privacyIDEA可以

    1. 检查 yubikey AND 的 OTP 值
    2. 使用策略检查是否允许用户使用此令牌类型或令牌序列号登录该计算机。见readthedocs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 2011-10-08
      • 2014-04-03
      • 2015-11-20
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多