我已经使用 ProFTPD 设置了 mod_sftp,但由于某种原因,它在连接时仍然提示我输入密码。
这是我的conf.d/myserver
文件:
SFTPEngine on
SFTPLog /var/log/sftp.log
Port 7770
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u
SFTPCompression delayed
MaxLoginAttempts 6
DefaultRoot ~
Umask 002
CreateHome on 770 dirmode 770
用户的公钥在 中/etc/proftpd/authorized_keys
。
答案1
ssh-keygen
我遇到过这种情况,这是由于将 ssh-rsa 格式密钥转换为 RFC-4716 密钥格式时出现的错误引起的:评论标头太长。
要确认这种情况是否发生在您身上,请在文件中启用 SFTPLog 选项proftpd.conf
,然后在 SFTP 日志文件中您将看到如下行,特别是“行太长”部分:
Jul 25 19:11:25 mod_sftp/0.9.7[16355]: public key fingerprint: 77:fa:c7:d6:da:b9:99:6f:9d:5f:74:30:ba:09:4f:e9
Jul 25 19:11:25 mod_sftp/0.9.7[16355]: line too long (74) on line 1 of '/etc/proftpd.d/authorized_keys/myusername'
Jul 25 19:11:25 mod_sftp/0.9.7[16355]: Make sure that '/etc/proftpd.d/authorized_keys/myusername' is a RFC4716 formatted key
Jul 25 19:11:25 mod_sftp/0.9.7[16355]: error base64-decoding key data in '/etc/proftpd.d/authorized_keys/myusername'
Jul 25 19:11:25 mod_sftp/0.9.7[16355]: error comparing keys from '/etc/proftpd.d/authorized_keys/myusername': Invalid argument
Jul 25 19:11:25 mod_sftp/0.9.7[16355]: sending userauth failure; remaining userauth methods: publickey,password
Jul 25 19:11:29 mod_sftp/0.9.7[16355]: disconnecting client (received EOF)
使用您选择的文本编辑器将其删除,密钥验证应该开始工作。使用 bash 它看起来像这样,其中 user.pub 是您的密钥文件:
cut -c 1-72 user.pub | sed '/^Comment: "[^"]*$/ s/$/"/' > user.pub
如果你想保留整个注释,你需要转义行尾并将其放在下一行。请参阅RFC 4716 的示例部分关于如何重新格式化评论。
最后,我在 CentOS 6.9 上使用时遇到了这个问题ssh-keygen
。我在 Mac OS Sierra 上使用的版本会正确截断关键注释以避免出现此问题。
答案2
SFTPAuthorizedUserKeys 的当前值设置为使用授权密钥的每个用户文件。我猜想对于给定用户(让我们以 jsmith 为例),他们的密钥需要放入名为 /etc/proftpd/authorized_keys/jsmith 的文件中。
为了使您当前的设置正常工作,请尝试将 SFTPAuthorizedUserKeys 的值更改为 /etc/proftpd/authorized_keys。
看http://www.proftpd.org/docs/contrib/mod_sftp.html#SFTPAuthorizedUserKeys了解更多详情。