之前都是用的Ftp,今天有兩個客戶要求用Sftp沒用過,今天研究了一下,記錄備忘
SFTP其實就是加密的FTP 可以通過ssh密匙 免密碼連接
- 系統:Ubuntu 16.04
- 軟件:openssh
安裝openssh
sudo apt-get install openssh-server
為SFTP訪問創建用戶組,便于管理權限
sudo addgroup sftp-users
創建用戶加入組,不允許登錄系統
sudo adduser alice
sudo usermod -G sftp-users -s /bin/false alice
創建SSH用戶組,并把管理員加入到該組(注意usermod中的-a參數的意思是不從其他用戶組用移除)
sudo addgroup ssh-users
sudo usermod -a -G ssh-users root
準備“監獄”的根目錄及共享目錄。這里解釋一下,“監獄”的根目錄必須滿足以下要求:所有者為root,其他任何用戶都不能擁有寫入權限。因此,為了讓SFTP用戶能夠上傳文件,還必須在“監獄”根目錄下再創建一個普通用戶能夠寫入的共享文件目錄。為了便于管理員通過SFTP管理上傳的文件,我把這個共享文件目錄配置為:由admin所有,允許sftp-users讀寫。這樣,管理員和SFTP用戶組成員就都能讀寫這個目錄了。
sudo mkdir /home/sftp_root
sudo mkdir /home/sftp_root/shared
sudo chown root:sftp-users /home/sftp_root/shared
sudo chmod 770 /home/sftp_root/shared
修改SSH配置文件
sudo vi/etc/ssh/sshd_config
文件底部添加
AllowGroups ssh-users sftp-users #只允許ssh-uers及sftp-users組的用戶通過SSH訪問系統
Match User sftp-ly #針對單個用戶設置
ChrootDirectory /sftp/sftp_root_ly/ # 根目錄
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp
Match User sftp-siemens
ChrootDirectory /sftp/sftp_root_siemens/
AllowTcpForwarding no
X11Forwarding no
ForceCommand internal-sftp
# 針對組進行額外設置
Match Group sftp-users
.....
可以針對組或用戶,額外增加一些設置:將“/home/sftp_root”設置為該組用戶的系統根目錄(因此它們將不能訪問該目錄之外的其他系統文件);禁止TCP Forwarding和X11 Forwarding;強制該組用戶僅僅使用SFTP
到這sftp就算配置完成了
驗證
- linux
隨便找一臺linux主機
sftp root@172.16.1.100
如果提示輸密碼,連接成功可以上傳文件 表示成功!
配置ssh免密登錄
- 生成密匙
在服務器上執行以下命令生成密匙
ssh-keygen -t rsa
默認生成的路徑是 /root/.ssh
- id_rsa 是私鑰 一般用于客戶端
- id_rsa.pub 是公鑰 一般用于服務器端
服務器上注冊公鑰
在/root/.ssh 目錄下
cat id_rsa.pub >> authorized_keys
將私鑰放到客戶端
- linux
scp id_rsa root@172.16.1.11:/root/.ssh
也可以直接vim打開后復制私鑰后在客戶端.ssh文件夾下建立同名文件黏貼私鑰
- windows
直接通過復制黏貼獲取私鑰 id_rsa
免密連接SFTP
- linux
sftp root@172.16.1.100
不用輸密碼能直接連接成功表示成功
- Windows
打開WinSCP客戶端-編輯站點-高級-驗證-添加私鑰
image.png
image.png
添加私鑰文件根據提示 將openssh格式的私鑰轉換為putty格式
!!!不用輸入密碼,能連接成功!!成功啦!
服務器端提供多用戶服務
如果要在SFTP服務器上建立多個用戶 分別提供服務
只需要在 相應用戶的 /home/用戶/.ssh 下放置正確的公鑰并注冊
即可用相應的私鑰 來連接
一個共享提供多個客戶端連接
一個sftp用戶共享提供多個客戶端連接
只需要在相應用戶的.ssh文件下的 authorized_keys 文件夾內添加多個公鑰即可
cat id_rsa.pub >> authorized_keys 多來幾次就行