目标:
- 使用sftp命令从linux系统A登录linux系统B
- 限制只能使用sftp登录,限制登录目录
- 可密码登录,可秘钥登录
一、在linux系统A上的操作
-
在/home中创建目录
#创建ftp用户家目录ftpuser mkdir /home/ftpuser #创建用于放秘钥的.ssh目录 mkdir /home/ftpuser/.ssh #创建一个zhangsan用户登录限定目录 mkdir zhangsan
-
创建用户组ftpuser,所有使用sftp登录的用户都可以放到此组中,便于管理
groupadd ftpuser
-
创建用户zhangsan
#家目录/home/ftpuser 组ftpuser 禁止登录shell的用户/sbin/nologin useradd -d /home/ftpuser -g ftpuser -s /sbin/nologin -M zhangsan
-
设置用户密码(为了使用密码登录)
#根据提示输入两次相同密码 passwd zhangsan
-
在sshd_config添加用户配置
vi /etc/ssh/sshd_config #修改Subsystem Subsystem sftp internal-sftp #限制的用户,多个用户以逗号隔开 Match User zhangsan #限制的用户组,多个用户组以逗号隔开 #Match Group ftpuser #不允许X11转发 X11Forwarding no #不允许允许tcp端口转发,保护其他的tcp连接 AllowTcpForwarding no #增加 ForceCommand internal-sftp #用户的根目录,用chroot将用户的根目录指定到%h,%h代表用户home目录,这样用户就只能在用户目录下活动。也可用%u,%u代表用户名 ChrootDirectory /home/ftpuser/%u
-
重启SSH服务
systemctl restart sshd
注:上面操作完成后就可以在linux系统B上直接使用密码登录啦,登录命令参考下面的第6条
二、在linux系统B上的操作
-
先查看有没有.ssh目录
ll ~/.ssh
-
如果上面查询没有,执行下面命令创建.ssh目录
mdkir ~/.ssh
-
使用下面命令生成秘钥,遇到提示直接回车即可
ssh-keygen
-
查看秘钥文件
#使用下面命令查看秘钥文件,id_rsa是私钥,id_rsa.pub是公钥 ll ~/.ssh
-
把公钥~/.ssh/id_rsa.pub内容追加到linux系统A(需要登录服务器)/home/ftpuser/.ssh/authorized_keys文件中
#跨服务器复制,需要知道目的服务器登录密码 scp ~/.ssh/id_rsa.pub roo@192.168.0.100:/home #在linux系统A中执行下面命令,把复制来的/home/id_rsa.pub内容追加到/home/ftpuser/.ssh/authorized_keys文件中 cat /home/id_rsa.pub >> /home/ftpuser/.ssh/authorized_keys
-
密码登录
#输入下面命令,根据提示输入密码(上面创建用户输入的密码) sftp -P 22 zhangsan@192.168.0.100 #如果报下面登录异常 Couldn't read packet: Connection reset by peer 解决思路: 查看sshd_config配置是否正确; 使用命令`ll /home/ftpuser/`查看目录`zhangsan`所属用户是否root,使用命令`chown root:root zhangsan`来修改目录所属的用户和组
-
秘钥登录
#输入下面命令,指定端口,指定私钥 sftp -P 22 -i ~/.ssh/id_rsa zhangsan@192.168.0.100