使用scp时要求额外的密码

时间:2015-02-23 22:47:46

标签: bash ssh scp tty

我不确定我是否应该在此处或在服务器故障中询问此问题,请随时标记问题并在必要时进行迁移。

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

我们买了一些我想使用的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从一台服务器到另一台具有此额外保护的服务器时,这种情况不会发生。

3 个答案:

答案 0 :(得分:3)

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

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

据说这可能是错误的做法。最有可能在您的系统上配置ssh以使用pampam yubikey模块可用于yubikey作为帐户的ssh身份验证。有关基础知识,请参阅https://developers.yubico.com/yubico-pam/

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

答案 1 :(得分:0)

正如Etan所指出的,你真的应该只使用PAM。

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

只需输入密码,不要输入,然后按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

答案 2 :(得分:0)

好的,您希望yubikey身份验证加上一项授权,检查是否允许用户在此服务器上登录。

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

privacyIDEA可以

  1. 检查yubikey的OTP值和
  2. 如果允许用户使用此令牌类型或令牌序列号登录该计算机,则使用策略进行检查。见readthedocs