SFTP配置、连接及挂载教程
服务器配置SFTP安装SSH服务创建SFTP账户修改SSH配置文件
客户机连接SFTP直接连接SFTP常用指令免密连接修改公钥名和位置修改私钥名和位置
客户机挂载SFTPLinux挂载SFTP直接挂载卸载共享目录启动时自动挂载
Window挂载SFTP
参考网址
安全文件传输协议(Secret File Transfer Protocol,SFTP),也被称为SSH File Transfer Protocol ,是一种基于安全外壳协议(Secure Shell,SSH)的文件传输协议,常用于计算机之间的文件数据传输。
SFTP只需用到一个端口(通常是22号端口),且大部分Linux系统都支持SFTP协议,这意味着SFTP有着较好的兼容性。
本教程结合作者实际的操作经历,将常用的SFTP配置、连接及挂载教程进行了汇总,并对一些不常见的配置细节进行了补充。希望本教程能帮助到有需要的人少走弯路。
服务器配置SFTP
服务器只有正确配置了SFTP才能提供文件传输服务。本教程将对Linux系统的SFTP配置进行介绍。
安装SSH服务
服务器需要安装SSH服务才能启动SFTP功能。部分Linux系统(比如CentOS)默认安装了SSH。若没有安装SSH,Linux系统通常可以使用包管理器来进行安装,以Debian衍生系统(比如Ubuntu)为例,其可通过如下指令安装SSH:
sudo apt install openssh-server
安装了SSH后,部分Linux系统(比如CentOS)可以通过如下指令查询SSH服务状态:
systemctl status sshd
而Ubuntu这类Linux系统则用如下指令:
systemctl status ssh
不同Linux系统安装SSH的指令可能各有不同,用户需根据系统的具体情况进行安装。
创建SFTP账户
这一步用于创建一个只用于SFTP文件传输的SSH账户。能够进行SSH登录的账户通常都可用于SFTP文件传输,但这么做可能导致隐私文件泄露,因此,服务器通常使用具有访问限制的账户进行SFTP文件传输。
在创建该SSH账户前需要先创建或指定一个用于SFTP服务的共享文件夹,也被称为共享目录,本文以创建共享目录“/home/sftp/”为例(井号“#”及后续内容为注释,输入指令时不要包含):
mkdir /home/sftp # 新建文件夹
chown root:root /home/sftp # 修改所属用户
chmod 755 /home/sftp # 修改权限
上述指令可能需要加上”sudo“提权。
为便于服务器账户浏览SFTP共享文件,可以创建一个专门的用户组,本文以“sftpGroup”组名为例:
groupadd sftpGroup
需要访问SFTP共享文件的账户使用如下指令加入该“sftpGroup”组:
usermod -a -G sftpGroup 服务器账户
接着创建SFTP账户,文本以“test”账户名为例:
useradd -d /home/sftp/test -s /bin/false -g sftpGroup test
上述指令的“-s /bin/false”用于限制该账户的功能,使其仅用于SFTP服务;“-g”指定“sftpGroup”为“test”账户的组;“-d”指定“/home/sftp/test”文件夹为“test”的用户目录(即“~”),该文件夹需要在之前指定的SFTP文件夹内,若该文件夹没有自动创建,则需要手动创建:
mkdir /home/sftp/test
chown test:sftpGrooup /home/sftp/test
随后修改用户目录的权限使得加入了“sftpGroup”组的服务器账户可以访问共享文件:
chmod 755 /home/sftp/test
最后再修改该账户的登录密码:
passwd test
修改SSH配置文件
这一步需要对“/etc/ssh/sshd_config”配置文件进行编辑以使得之前创建的SSH账户可用于SFTP服务。使用vim编辑的指令为:
vim /etc/ssh/sshd_config
使用gedit编辑的指令为:
gedit /etc/ssh/sshd_config
在“/etc/ssh/sshd_config”中找到:
Subsystem sftp /usr/libexec/openssh/sftp-server
将其注释:
#Subsystem sftp /usr/libexec/openssh/sftp-server
随后在末尾补充如下内容:
Subsystem sftp internal-sftp
Match User test
ChrootDirectory /home/sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
上述内容的“Match User”用于对指定账户“test”进行配置;“ChrootDirectory”用于限定账户“test”向上只可访问至共享文件夹“/home/sftp”,而不可访问该目录之外的其它文件;“ForceCommand internal-sftp”用于限定账户“test”只用于SFTP服务。其它与SFTP无关的服务也可以关闭。
如果还需要修改端口及控制登录的客户机IP,则需要在“/etc/ssh/sshd_config”中的“Match User”之前填加如下内容:
Port 端口号
AllowUsers test@IP地址
修改完配置文件后需要重启SSH服务,部分Linux系统(比如CentOS)可用如下指令:
systemctl restart sshd
或:
service sshd restart
Debian衍生系统(比如Ubuntu)则用:
sudo /etc/init.d/ssh restart
或:
sudo systemctl restart ssh
或:
sudo service ssh restart
客户机连接SFTP
在确保SFTP服务端的IP是可以访问的前提下,安装了SSH客户端的客户机就可以通过SFTP与服务端传输文件了。
Linux服务端的IP可以通过如下指令查询IP:
ifconfig
直接连接
客户端就可以使用如下指令连接至SFTP服务端:
sftp 账户名@IP地址
连接到服务器后再输入密码就可以进行传输操作。
SFTP常用指令
SFTP通常使用如下指令进行传输等操作:
指令名功能使用示范put向服务端上传文件put 文件名 put -r 文件夹 远程目录get从服务端下载文件get 文件名 get -r 文件夹 远程目录rm删除服务端文件rm 文件名rmdir删除服务端文件夹rmdir 文件夹ls显示服务端当前目录内容lscd进入服务端指定目录cd 文件夹! 命令在客户端执行指定命令! pwd
免密连接
免密连接指自动使用密钥对而不是手动输入密码进行连接。SSH通常使用RSA密钥来进行连接,大部分Linux系统可以使用如下指令创建RSA密钥对:
ssh-keygen -t rsa -b 2048
上述指令的“-t rsa”用于指定生成RSA密钥;“-b”用于设置RSA密钥的位数,该数值越大则RSA越复杂。
上述指令执行后通常会在用户目录的“.ssh”这一隐藏文件夹(即“~/.ssh”)中生成服务器用的“id_rsa.pub”公钥和客户机连接用的“id_rsa”私钥。
通常情况下,在使用默认配置时,Linux服务器端只需将“id_rsa.pub”公钥重命名为“authorized_keys”并放置于SFTP账户的用户目录的“.ssh”文件夹(在本教程所用的“test”例子中为“/home/sftp/test”目录)中,同时在Linux客户机中将“id_rsa”私钥放置于用于连接的账户的用户目录的“.ssh”文件夹中,并确保该私钥的权限被设为仅可被连接用的账户访问:
chown 客户机账户:客户机账户 id_rsa
chmod 600 id_rsa
就可完成密钥对的部署。随后再使用SFTP连接指令就可以不用输密码了:
sftp 账户名@IP地址
修改公钥名和位置
Linux服务器和Linux客户机的默认公私钥的名字和位置都是可以修改的。对于Linux服务器来说,编辑SSH配置文件“/etc/ssh/sshd_config”,输入如下内容即可修改公钥名和位置:
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile 目录/公钥名字
对于本教程所用的“test”例子,则可结合“Match User”指令将内容修改为:
Subsystem sftp internal-sftp
Match User test
ChrootDirectory /home/sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile 目录/公钥名字
修改私钥名和位置
对于Linux客户机来说,在确保私钥权限正确的前提下,编辑用于连接的账户的用户目录的“.ssh/config”文件,输入如下内容即可修改私钥名和位置:
Host 简称
HostName IP地址
User 账户名
Port 22
IdentityFile 目录/私钥名字
如果打算只用密钥而不使用密码登录则可再上述内容后补充:
IdentitiesOnly yes
客户机配置完后就可以使用简称来进行SFTP连接:
sftp 简称
若需要连接到多个服务器的SFTP或SSH,则可以编写多个“Host”:
Host 简称1
HostName IP地址1
User 账户名A
Host 简称2
HostName IP地址2
User 账户名B
客户机挂载SFTP
除了直接连接SFTP外,大部分操作系统还可以通过将SFTP挂载为网络文件夹的方式来进行更为灵活方便的文件数据传输。
为确保挂载的稳定性,建议在“/etc/ssh/sshd_config”中追加如下内容:
ClientAliveInterval 60
ClientAliveCountMax 3
上述内容规定服务端每60秒发一次心跳,失败后重连次数最多3次,这些数字用户可根据具体需求调整。
Linux挂载SFTP
部分Linux客户机可以借助“sshfs”这类工具软件来进行SFTP挂载。CentOS这类系统使用如下指令安装sshfs:
dnf config-manager --set-enabled powertools
dnf install fuse-sshfs
老版本的CentOS执行上述指令时可能需要换源以及用“yum”指令代替“dnf”,有时还可能要手动填加fuse用户组:
usermod -a -G fuse 账户名
而对于ubuntu这类系统则使用如下指令安装sshfs:
apt-get install sshfs
如果需要其他账户也能访问挂载目录,则还需要编辑“/etc/fuse.conf”,向其添加如下内容:
user_allow_other
直接挂载
安装了sshfs后使用如下指令即可将服务端的SFTP目录挂载为客户机本地目录:
sshfs 账户名@IP地址:/目录 挂载目录 -o sshfs_sync,allow_other
上述指令的“-o”用于指定SFTP的附加功能,本例中的“sshfs_sync”用于数据修改后的立即同步;“allow_other”允许客户机的其他用户访问SFTP共享目录。sshfs的“-o”还可以支持“ServerAliveInterval=60”、“ServerAliveCountMax=3”等参数,用户可根据具体需求进行设置。
如果客户机配置了“~/.ssh/config”的Host,则还可以使用“Host”的简称来进行SFTP挂载:
sshfs 简称:/目录 挂载目录 -o sshfs_sync,allow_other
卸载共享目录
若要卸载已连接的SFTP目录,可以使用umount指令,在使用该指令前可以先使用df指令查询挂载情况:
df
随后再用umount卸载SFTP目录:
umount 挂载目录
启动时自动挂载
设置启动时自动挂载需要先设置免密连接。
随后再修改“/etc/fstab”,向其末尾追加如下内容:
账户名@IP地址:/目录 挂载目录 fuse.sshfs defaults,allow_other,_netdev 0 0
上述指令在“defaults”之后同样可以自定义连接参数,若设置了root账户的“/root/.ssh/config”的Host,则可以使用“Host”的简称来进行挂载:
简称:/目录 挂载目录 fuse.sshfs defaults,allow_other,_netdev 0 0
以本教程用的“test”为例,设其用户目录为“/home/sftp/test”,设其在服务端的“/etc/ssh/sshd_config”的内容被配置为:
Port 22
Subsystem sftp internal-sftp
Match User test
ChrootDirectory /home/sftp
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PubkeyAuthentication yes
RSAAuthentication yes
AuthorizedKeysFile 目录/公钥名字
ClientAliveInterval 60
ClientAliveCountMax 3
则客户机的“/root/.ssh/config”的内容可设置为:
Host hgsftp
HostName IP地址
User test
Port 22
IdentityFile 目录/私钥名字
而客户机的“/etc/fstab”则需在末尾追加如下内容:
hgsftp:/test 挂载目录 fuse.sshfs defaults,allow_other,_netdev 0 0
Window挂载SFTP
Windows客户机需要安装第三方软件才能挂载SFTP,本教程以Win10中安装WinFSP为例。
可以从WinFSP官网下载到连接SFTP所需的“sshfs-win”和“winfsp”安装程序。
将这2个程序安装上后,右键点击“此电脑”,选择“映射网络驱动器”。
在“映射网络驱动器”界面中选择盘符,按需要选择其它功能,随后在“文件夹”处输入连接指令:
\\sshfs.r\账户名@IP地址\目录
以本教程用的“test”为例,“映射网络驱动器”界面的“文件夹”处的内容如下图所示。
连接成功后就可以在电脑中见到对应的SFTP网盘了。
参考网址
linux下禁止某一用户使用ssh登陆但可使用sftp登陆linux下使用sshfs挂载远程linux文件系统或目录Centos sshfs的安装和使用–将远程sftp目录映射到本地目录SSH 密钥登录使用 SSHFS 挂载远程的 Linux 文件系统及目录在 centOS 上设置 SSH 用户配置(本地客户端)解决SSH自动断线问题sftp的操作命令ubuntu 20.04 通过 sshfs 共享文件夹到 windows