服务器端的CD上的SFTP客户端连接

有没有一种方法使用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命令)没有任何相似之处。