需求:搭建SFTP,提供外部系统访问,基于公钥配置到受信任列表实现无密码登录.
环境规划
服务端拟订创建sftp和用户组
用户1 sftp用户 user1 密码user1 客户端公钥文件 client_public_key1
用户2 sftp用户 user2 密码user2 客户端公钥文件 client_public_key2
客户端生成公钥
首先需要在家目录创建.ssh文件夹
查看隐藏目录,默认此目录里如果没有.ssh隐藏目录,则需要手动创建
ll –a --> 查看隐藏目录
新建.ssh文件夹
mkdir .ssh
进入.ssh目录
cd .ssh
执行创建密钥对命令
ssh-keygen -t rsa
================================================================
提示信息如下:
Generating public /private rsa key pair.
Please be patient.... Key generation may take a few minutes
Enter file in which to save the key (/home/ap/appnms/.ssh/id_rsa):
# 按回车保存为: //.ssh/id_rsa,即当前用户的私钥
Enter passphrase (empty for no passphrase):
# 按回车,表示读取密钥时不需要密钥的密码
Enter same passphrase again:
# 确认密钥的密码,必须和上面的输入相同
Your identification has been saved in /home/ap/appnms/.ssh/id_rsa.
# 私钥保存信息
Your public key has been saved in /home/ap/appnms/.ssh/id_rsa.pub.
服务端
groupadd sftp
useradd -s /sbin/nologin -g sftp user1
passwd user1
mkdir -p /data/sftp/user1/upload
chown user1:sftp /data/sftp/user1/upload
mkdir -p /home/user1/.ssh
cat client_public_key1 > /home/user 1/.ssh/authorized_keys
chown -R user1:sftp /home/user1/.ssh/
chmod 644 /home/user1/.ssh/authorized_keys
chmod 755 /home/user1/.ssh/
useradd -s /sbin/nologin -g sftp user2
passwd user2
mkdir -p /data/sftp/user2/upload
chown user2:sftp /data/sftp/user2/upload
mkdir -p /home/user2/.ssh
cat client_public_key2 > /home/user 2/.ssh/authorized_keys
chown -R user2:sftp /home/user2/.ssh/
chmod 644 /home/user2/.ssh/authorized_keys
chmod 755 /home/user2/.ssh/
sftp服务
编辑文件 /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
注释掉如下行:
# Subsystem sftp /usr/libexec/openssh/sftp-server
查看文件末尾是否有: Subsystem sftp internal -sftp 没有一定补上去
Match User user1
ChrootDirectory /data /sftp/user1
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Match User user2
ChrootDirectory /data /sftp/user2
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
service sshd restart
需要关闭SELINUX,vi /etc/selinux/config,SELINUX =disabled
测试
服务端数据准备
# touch somefile /data/sftp/user1/dirdir1
# echo "abc" > /data/sftp/user1/upload/abc.txt
# touch somefile /data/sftp/user2/dirdir2
# echo "abc" > /data/sftp/user2/upload/abc.txt
客户端访问
echo "client" > client.txt
sftp user1@ip
pwd
ls
cd upload
put client.txt
cd ../dirdir1
put client.txt
sftp 上传下载命令示例(方便测试)
sftp> get /usr/local /index.php /home/fuyatao/
将从远程主机的 /usr/local /目录下将 index.php 下载到本地 /home/fuyatao/目录下
sftp> put /usr/local /Linuxgl.pdf /var/www/fuyatao/
把本地 /usr/local /目录下的 linuxgl.pdf文件上传至远程主机/var/www/fuyatao/ 目录下
快速构建
===============================================================================
用户: wf01
快速构建:
-- 第一部分: 用户名 密码设置
useradd -s /sbin/nologin -g sftp wf01
passwd wf01
-- 第二部分: 配置目录,并给用户授权
mkdir -p /data/sftp/wf01/upload
mkdir -p /data/sftp/wf01/download
chown wf01:sftp /data/sftp/wf01/upload
-- 第三部分: 公钥配置,操作权限配置
mkdir -p /home/wf01/.ssh
cat client_public_key1 > /home/user 1/.ssh/authorized_keys
chown -R wf01:sftp /home/wf01/.ssh/
chmod 644 /home/wf01/.ssh/authorized_keys
chmod 755 /home/wf01/.ssh/
-- 第四部分: 配置文件配置(sshd_config)
vi /etc/ssh/sshd_config
注释掉 : Subsystem sftp /usr/libexec/openssh/sftp-server
查看是否有: Subsystem sftp internal-sftp 没有一定补上去
末尾新增:
Match User wf01
ChrootDirectory /data/sftp/wf01
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
-- 第五部分: 重启sshd_config,测试.
重启ssh服务
service sshd restart
测试命令:
sftp wf01@IP
sftp> get /usr/local /index .php /home/fuyatao/
将从远程主机的 /usr/local /目录下将 index .php 下载到本地 /home/fuyatao/目录下
sftp> put /usr/local /Linuxgl.pdf /var/www/fuyatao/
把本地 /usr/local /目录下的 linuxgl.pdf文件上传至远程主机/var/www/fuyatao/ 目录下
===============================================================================