-
创建用户
#创建sftp用户组用于管理 groupadd sftp #创建用户根目录 mkdir /opt/sftp/xxx #创建用户 useradd -d /opt/sftp/xxx -m -g sftp -s /sbin/nologin xxx echo "123456" |passwd --stdin xxx #修改主目录权限 chmod 755 /opt/sftp/xxx chown root:xxx /opt/sftp/xxx
-
修改ssh配置
修改/etc/ssh/sshd_config文件,添加或修改如下参数
UseDNS no SyslogFacility AUTHPRIV PermitRootLogin yes Subsystem sftp internal-sftp #使用sftp服务使用系统自带的internal-sftp Match Group sftp #匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割 ChrootDirectory %h #用chroot将用户的根目录指定到%h,%h代表用户名家目录,这样用户就只能在/data/sftp/%u下活动 ForceCommand internal-sftp #强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令 AllowTcpForwarding no #不允许转发TCP协议,默认是yes,如果用户可以shell访问则建议为yes X11Forwarding no #是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。如果启用了 UseLogin ,那么X11转发将被自动禁止。
常见问题
-
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
这个一般是用户登陆设置问题,检查你的/etc/ssh/sshd_config文件中的以下参数:
RSAAuthentication yes PubkeyAuthentication yes #这两项为打开公钥模式 AuthorizedKeysFile .ssh/authorized_keys #配置公钥记录文件 PasswordAuthentication yes #打开密码验证模式
-
输入密码后提示:
packet_write_wait: Connection to 172.16.0.30 port 22: Broken pipe Couldn't read packet: Connection reset by peer
一般是用户目录权限有问题,原则是:
由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root 由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
也有可能是用户目录不存在,检查你的/etc/password中对应用户的家目录配置