Contents

如何将公钥限制为仅sftp登录

Contents

起因

最近有个权限控制的需求,需要允许同事通过SFTP软件上传和下载文件,不允许他登录到服务器;因为涉及到程序运行权限的问题,不能另外开一个用户,只能使用当前用户来上传。查阅 ssh 帮助文档,看到参数: SSH_ORIGINAL_COMMAND 可以很简单的解决这个问题

原理

通过我的测试,我发现 sftp 登录的时候,SSH_ORIGINAL_COMMAND 的值为 /usr/lib/sftp-server

我们知道 linux的公钥是可以通过在开头加上 command 模块来执行自定义命令,那么我们只需要在里面加上判断就可以了,最终结果如下:

1
2
3
4
5
# 建议使用sftp-server绝对路径
# CentOS 7: /usr/libexec/openssh/sftp-server
# Ubuntu 16.04: /usr/lib/sftp-server
# 模糊匹配
command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ sftp-server$ ]]; then $SSH_ORIGINAL_COMMAND ; else echo Access Denied; fi" ssh-rsa AAAA...

关于 SSH_ORIGINAL_COMMAND

1
2
3
4
$ man ssh
...
SSH_ORIGINAL_COMMAND  This variable contains the original command line if a forced command is executed.  It can be used to extract the original arguments.
...