我可以在 sftp 服务器上同时实现基于密钥和基于密码的身份验证吗?我希望服务器首先进行基于密钥的身份验证。如果正确,则要求进行基于密码的身份验证。这可以实现吗?
答案1
SFTP 几乎总是(但不一定) 使用 SSH 作为传输。身份验证在 SSH 级别执行。因此,您要查找的选项属于 SSH 服务器的配置。
我假设是 OpenSSH。请参阅man 5 sshd_config
[强调我的]:
AuthenticationMethods
指定必须成功完成才能授予用户访问权限的身份验证方法。此选项后面必须跟一个或多个以逗号分隔的身份验证方法名称列表,或跟单个字符串 any,以指示接受任何单个身份验证方法的默认行为。如果覆盖了默认值,则成功的身份验证需要完成至少一个列表中的每种方法。
例如,
publickey,password publickey,keyboard-interactive
将要求用户完成公钥认证,然后进行密码或键盘交互认证。每个阶段仅提供一个或多个列表中的下一个方法,因此对于此示例,不可能在公钥之前尝试密码或键盘交互式身份验证。[…]
(边注:password
和有什么区别keyboard-interactive
?)
看起来这个例子正是你想要的。
请注意,该设置不仅会影响 SFTP,还会影响 SSH 的每次使用。据我所知,您不能轻易地将设置用于 SFTP,而将其用于其他所有用途,因为身份验证在服务器知道您想要 SFTP 之前发生。不过,服务器很早就知道用户,因此如果您需要对“仅使用 SFTP 的用户”执行此操作,那么可以通过条件块 (Match
)。
更改配置文件后,您需要重新启动 SSH 服务器或以其他方式告诉它重新加载配置。OpenSSHsshd
在收到挂断信号 SIGHUP 后会重新读取其配置。