需求:搭建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/ 目錄下
===============================================================================