账号密码登录:

# 1. 创建SFTP用户组
groupadd sftp
# 查看用户组
cat /etc/group

# 2. 创建SFTP登录用户
# -g 加入到sftp组,-s 禁止ssh登陆,-M 不要自动建立用户的登陆目录
useradd -g sftp -s /sbin/nologin -M yug
# 设置密码
passwd yug
# 输入密码(两次)
password01!

# 3. 创建SFTP文件存放目录
mkdir -p /sftp/file/yug

# 4. 设置权限
# 设置目录文件所属 root 用户(-R:处理指定目录以及其子目录下的所有文件)具体解释看下文
chown -R root:sftp /sftp/file/yug
# 设置文件夹权限(755:所有者具有读取、写入、执行权限,同组用户具有读取、执行权限,但没有写入权限,其他用户具有读取、执行权限,但没有写入权限)
chmod 755 /sftp/file/yug

# 5. 修改ssh配置文件
# 先备份防止出问题
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
vi /etc/ssh/sshd_config
# 注释行:
Subsystem      sftp    /usr/libexec/openssh/sftp-server
# 新增以下配置
Subsystem sftp internal-sftp
Match Group sftp # 指定活动目录
ChrootDirectory /sftp/file/%u # 指定根目录,%u代表用户名,这样用户就只能在/data/sftp/%u下活动
ForceCommand internal-sftp # 强制执行内部SFTP,并忽略任何~/.ssh/rc中的命令
AllowTcpForwarding no # 禁用端口转发
X11Forwarding no # 禁用X11图形界面转发

# 6. 重启sshd
service sshd restart

# 7. 测试连接
sftp yug@ip

# 8. 创建文件设置权限
# !!!
# 使用chroot指定根目录后,根目录是无法写入的,所以要新建一个目录供yug上传文件。
# 这个目录所有者为yug,所有组为sftp,所有者有写入权限,而所有组无写入权限
mkdir /sftp/file/yug/upload
chown yug:sftp /sftp/file/yug/upload
chmod 755 /sftp/file/yug/upload

RSA认证方式设置和登录:

# 1. 创建用户
# 注意这里不要 -M , 因为我们需要useradd为新增用户在/home目录下自动建立用户的登陆目录,我们需要再/home/npw目录下设置密钥文件。
# 不需要设置密码
useradd -g sftp -s /sbin/nologin npw
cd /home/npw
ll -a

# 2. 创建目录,创建秘钥文件
mkdir .ssh
ssh-keygen -t rsa
# 输入:
/home/npw/.ssh/id_rsa_npw
# 输入后,连续两次回车(不需要设置密码)
# 操作后,会在 /home/npw/.ssh 下创建秘钥文件

# 3. 写入秘钥
cat id_rsa_npw.pub >> authorized_keys

# 4. 设置权限
chmod 600 /home/npw/.ssh/authorized_keys
chmod 700 /home/npw/.ssh
chown -R npw:sftp /home/npw/.ssh

# 5. 添加配置
vi /etc/ssh/sshd_config
# 添加配置:
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 6. 创建存放上传文件的目录
mkdir /sftp/file/npw
# !!! 因为ChrootDirectory指定目录时,根据用户名创建了文件夹,npw用户是新创建的,所以需要创建/sftp/file/npw目录
# 如果没有权限,按照上文的设置一下即可。

# 7. xftp秘钥连接
# 先把秘钥导下来(id_rsa_npw)
# 输入IP,协议使用SFTP
# 方法使用Public Key,点击设置,把秘钥导入进去,输入账号(npw)

sftp 目录不存在创建目录java 创建sftp用户指定目录_linux

常见错误:
连接报错:Couldn’t read packet: Connection reset by peer

# 查看日志
tail /var/log/secure -n 20

Nov 24 11:26:03 hdp01 sshd[1373]: Accepted password for yug from 192.168.21.25 port 56792 ssh2
Nov 24 11:26:04 hdp01 sshd[1373]: pam_unix(sshd:session): session opened for user yug by (uid=0)
Nov 24 11:26:04 hdp01 sshd[1373]: fatal: bad ownership or modes for chroot directory component "/sftp/file/" [postauth]
Nov 24 11:26:04 hdp01 sshd[1373]: pam_unix(sshd:session): session closed for user yug

错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX”的内容
目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
所以遵循以上两个原则
1)我们将/sftp/file/yug的所有者设置为了root,所有组设置为sftp
2)我们将/sftp/file/yug的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限