我不确定我是否应该在此处或在服务器故障中询问此问题,请随时标记问题并在必要时进行迁移。
我有一些服务器,我想添加一个额外的安全层。实际上我们正在使用密码认证和密码。
我们买了一些我想使用的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
从一台服务器到另一台具有此额外保护的服务器时,这种情况不会发生。
答案 0 :(得分:3)
scp
没有启动交互式会话,因此没有要连接的终端(因此没有/dev/tty
可以读取)。
在这种情况下,您需要检测到它而不是尝试从中读取它。
据说这可能是错误的做法。最有可能在您的系统上配置ssh
以使用pam
,pam
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可以