Linux 下ssh sftp配置之**方式登录详解
由于vsftp采用明文传输,用户名密码可通过抓包得到,为了安全性,需使用sftp,锁定目录且不允许sftp用户登到服务器。由于sftp使用的是ssh协议,需保证用户只能使用sftp,不能ssh到机器进行操作,且使用**登陆、不是22端口。
先看下原理图:
1. 在远程目标创建sftp服务用户组,创建sftp服务根目录
1 |
groupadd sftp
|
#此目录及上级目录的所有者必须为root,权限不高于755,此目录的组最好设定为sftp
1
2
3
|
mkdir /data/sftp
chown -R root: sftp /data/sftp
chmod -R 0755 /data/sftp
|
2. 修改sshd配置文件
1
2
|
cp /etc/ssh/sshd_config ,_bk} #备份配置文件
sed -i '[email protected]#Port [email protected] [email protected]' /etc/ssh/sshd_config #保证原来22端口可以
|
1 |
vi /etc/ssh/sshd_config
|
注释掉/etc/ssh/sshd_config文件中的此行代码:
1 |
Subsystem sftp /usr/libexec/openssh/sftp-server
|
添加如下代码:
1
2
3
4
5
6
7
|
Port 22222 #此处改为非22端口 Subsystem sftp internal- sftp -l INFO -f AUTH
Match Group sftp
ChrootDirectory /data/sftp/ %u
X11Forwarding no AllowTcpForwarding no ForceCommand internal- sftp -l INFO -f AUTH
|
凡是在用户组sftp里的用户,都可以使用sftp服务;使用sftp服务连接上之后,可访问目录为/data/sftp/username
举个例子:
test是一个sftp组的用户,它通过sftp连接服务器上之后,只能看到/data/sftp/test目录下的内容
test2也是一个sftp组的用户,它通过sftp连接服务器之后,只能看到/data/sftp/test2目录下的内容
3. 创建sftp用户
#此例将创建一个名称为test的sftp帐号
#创建test sftp家目录:test目录的所有者必须是root,组最好设定为sftp,权限不高于755
1
2
3
4
|
mkdir /data/sftp/test
chmod 0755 /data/sftp/test
chown root: sftp /data/sftp/test
useradd -g sftp -s /sbin/nologin test #添加用户,参数-s /sbin/nologin禁止用户通过命令行登录
|
在本地创建test用户**对(用来连接远程服务器的):
1
2
3
4
|
# mkdir /home/test/.ssh # ssh-****** -t rsa
# ssh-copy-id [email protected] ##要远程的目标服务器IP和账户 # chown -R test.sftp /home/test |
在目标远程服务器test目录下创建一个可以写的upload目录
1
2
|
mkdir /data/sftp/test/upload
chown -R test : sftp /data/sftp/test/upload
|
注:sftp服务的根目录的所有者必须是root,权限不能超过755(上级目录也必须遵循此规则),sftp的用户目录所有者也必须是root,且最高权限不能超过755。
4. 测试sftp
1 |
systemctl restart sshd.service |
test用户**登陆:
1 |
sftp [email protected] ##在本地sftp登陆远程服务器 |
另外,将公钥拷贝到服务器的~/.ssh/authorized_keys文件中方法有如下几种:
1、将公钥通过scp拷贝到服务器上,然后追加到~/.ssh/authorized_keys文件中,这种方式比较麻烦。scp -P 22 ~/.ssh/id_rsa.pub [email protected]:~/。
2、通过ssh-copy-id程序,就是我演示的方法,ssh-copyid [email protected]即可
3、可以通过cat ~/.ssh/id_rsa.pub | ssh -p 22 [email protected] ‘cat >> ~/.ssh/authorized_keys’,这个也是比较常用的方法,因为可以更改端口号。