几个月前我建立了一个 sftp 帐户。
我大致遵循了这个指南:https://wiki.archlinux.org/index.php/SFTP_chroot
可以从 Linux 访问。
现在有人想通过 WinScP 访问 sftp 帐户。
我根据这些文档进行了操作:https://winscp.net/eng/docs/guide_public_key
我通过 WinSCP 创建了一个公钥/私钥对,并使用以下命令为 authorized_keys 文件创建了公钥:
puttygen -O public-openssh -o foo.pub foo.ppk
我像往常一样将 foo.pub 行添加到 ~modsftp/.ssh/authorized_keys。
从 Linux 进行无密码访问可以实现,但通过 putty/winscp 则不行:
===> psftp -i foo.ppk modsftp@remote-host
Using username "modsftp".
Server refused our key
Using keyboard-interactive authentication.
Password:
在 ssh 服务器上我只看到这一行:
sshd[26281]: Connection closed by 10.111.44.33 [preauth]
我不知道为什么它可以通过 openssh 命令行工具工作,但却不能通过 putty/winscp 工作。
答案1
问题已解决:PEBCAK(椅子和键盘之间存在问题)。
通过 openssh 工具访问可以成功,因为使用了我的 ssh-agent 而不是-i foo
命令行参数 :-)
在这种情况下,将公钥添加到 ~modsftp/.ssh/authorized_keys 是无用的。
如果我像这样禁用 ssh-agent(将 SSH_AUTH_SOCK 设置为空字符串),它对 openssh 工具也不起作用:
SSH_AUTH_SOCK= sftp -i foo modsftp@remote-host
我在 sshd_config 中打开LogLevel DEBUG
并在日志文件中看到了该问题:
sshd[30819]: debug1: matching key found: file /etc/ssh/authorized_keys/modsftp, line 1
BINGO:sftp-only 设置与普通 ssh 帐户不同。authorized_keys 存储在不同的文件中。
问题解决了。我希望这个问题+答案能够帮助其他遇到类似问题的人。