0. 查看openssh的版本


ssh -V



         使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级。




1. 搭建SFTP服务器


Step-1:创建sftp组:


#groupadd sftp


Step-2:创建一个sftp用户,用户名为mysftp,密码为mysftp:


#useradd -g sftp -s /bin/false mysftp  //用户名


#passwd mysftp  //密码



Step-3:sftp组的用户的home目录统一指定到/data/sftp下,按用户名区分,这里先新建一个mysftp目录,



然后指定mysftp的home为/data/sftp/mysftp:



#mkdir -p /data/sftp/mysftp 


#usermod -d /data/sftp/mysftp mysftp





Step-4:配置sshd_config:


vi /etc/ssh/sshd_config



        找到如下这行,用#符号注释掉,大致在文件末尾处。


       #Subsystem      sftp    /usr/libexec/openssh/sftp-server 


       在文件最后面添加如下几行内容,然后保存。


     Subsystem       sftp    internal-sftp   


     Match Group sftp 


     ChrootDirectory /data/sftp/%u 


     ForceCommand    internal-sftp 


     AllowTcpForwarding no 


     X11Forwarding no



Step-5:设定Chroot目录权限:



#chown root:sftp /data/sftp/mysftp  


#chmod 755 /data/sftp/mysftp


Step-6:建立SFTP用户登入后可写入的目录:





照上面设置后,在重启sshd服务后,用户mysftp已经可以登录。



但使用chroot指定根目录后, 根应该是无法写入的,所以要新建一个目录供mysftp上传文件。



这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:# mkdir /data/sftp/mysftp/upload 



#       chown mysftp:sftp /data/sftp/mysftp/upload  


#       chmod 755 /data/sftp/mysftp/upload


Step-7:修改/etc/selinux/config:



#vi /etc/selinux/config  


将文件中的SELINUX=enforcing 修改为 SELINUX=disabled ,然后保存。在输入命令


#setenforce 0



Step-8:重启sshd服务:



#service sshd restart


Step-9:验证sftp环境:


sftp mysftp@127.0.0.1


Step-10:使用FileZilla FTP Client连接SFTP服务器:



 输入主机IP地址、用户名、密码、端口连接SFTP服务器,端口默认为22。

前面的博文中, 我们已经学习了sftp服务器的搭建, 所以这里就不再赘述了, 定sftp服务器的用户名和密码分别为user和password. 下面, 我们来学习一下linux中常用的sftp命令, 当然, 需要linux支持sftp哈。



       1. sftp user@ip



            你要用sftp, 当然得登录到sftp服务器啊, 在linux的shell中执行上面的命令后, linux shell会提示用户输入密码, 我们就输入password吧。 这样就成功建立了sftp连接。



       2. help



           建立连接后, linux shell中的$编程了sftp>,  这也对。 现在执行以下help, 可以看看sftp支持哪些命令。



       3. pwd和lpwd



           pwd是看远端服务器的目录, 即sftp服务器默认的当前目录。  lpwd是看linux本地目录。



       4. ls和lls



           ls是看sftp服务器下当前目录下的东东, lls是看linux当前目录下的东东。



       5. put a.txt



           这个是把linux当前目录下的a.txt文件上传到sftp服务器的当前目录下。



        6. get b.txt



          这个是把sftp服务器当前目录下的b.txt文件下载到linux当前目录下。



         7. !command



            这个是指在linux上执行command这个命令, 比如!ls是列举linux当前目录下的东东, !rm a.txt是删除linux当前目录下的a.txt文件。



            这个命令非常非常有用, 因为在sftp> 后输入命令, 默认值针对sftp服务器的, 所以执行rm a.txt删除的是sftp服务器上的a.txt文件, 而非本地的linux上的a.txt文件。



         8. exit和quit



             退出。



         总之, 连接后, 有一个help命令, 足矣足矣。