有没有一种方法使用sftp来configuration服务器端在客户端连接时运行cd命令?
我有我的用户扔到chroot,该文件夹必须是root:root chowned,不能被任何其他用户写入,在chroot中有sftp用户所拥有的子文件夹。
我想要做的是在用户连接时,将用户从服务器端的服务器端切换到他们的文件夹,以避免每次连接时都不得不这样做。 这可能吗?
OpenSSH使用一个名为sftp-server
的程序来处理SFTP会话的服务器端。 Sftp-server使用-d
选项来指定用户的起始目录,作为其主目录的替代。 请参阅sftp-server手册页 。
如果您使用的是典型的SFTP chroot jail安装程序 ,则可能在sshd_config中有一行:
ForceCommand internal-sftp
这导致sshd
运行内置于sshd程序中的sftp-server代码的副本。 您可以将命令行参数添加到此行,就像独立的sftp-server程序一样。 所以,例如:
Match User jdoe ChrootDirectory /var/jdoe-root ForceCommand internal-sftp -d /jdoe-homedir
当“jdoe”login时,他将被chrooted到/var/jdoe-root
,他的会话的起始目录将是/var/jdoe-root/jdoe-homedir
。
SFTP协议/会话是无状态的。 SFTP的工作目录没有概念,与shell或FTP相反。 工作目录的任何错觉都由SFTP客户端模拟。
所以你不能强制它在服务器端。
注意FTP协议中的CWD
命令(在典型的FTP客户端的cd
命令后台使用),但SFTP协议(在典型的SFTP客户端中,实际上是协议而不是cd
命令)没有任何相似之处。