用途说明
sftp命令可以通过ssh来上传和下载文件,是常用的文件传输工具,它的使用方式与ftp类似,但它使用ssh作为底层传输协议,所以安全性比ftp要好得多。
常用方式
格式:sftp <host>
通过sftp连接<host>,端口为默认的22,用户为Linux当前登录用户。
格式:sftp -oPort=<port> <host>
通过sftp连接<host>,指定端口<port>,用户为Linux当前登录用户。
格式:sftp <user>@<host>
通过sftp连接<host>,端口为默认的22,指定用户<user>。
格式:sftp -oPort=<port> <user>@<host>
通过sftp连接<host>,端口为<port>,用户为<user>。
sftp连接成功之后常用操作命令如下:
help/? 打印帮助信息。
pwd 查看远程服务器当前目录;
lpwd 查看本地系统的当前目录。
cd <dir> 将远程服务器的当前目录更改为<dir>;
lcd <dir> 将本地系统的当前目录更改为<dir>。
ls 显示远程服务器上当前目录的文件名;
ls -l 显示远程服务器上当前目录的文件详细列表;
ls <pattern> 显示远程服务器上符合指定模式<pattern>的文件名;
ls -l <pattern> 显示远程服务器上符合指定模式<pattern>的文件详细列表。
lls 显示本地系统上当前目录的文件名;
lls的其他参数与ls命令的类似。
get <file> 下载指定文件<file>;
get <pattern> 下载符合指定模式<pattern>的文件。
put <file> 上传指定文件<file>;
get <pattern> 上传符合指定模式<pattern>的文件。
在sftp中get表示下载即得到; put表示上传即放置
sftp> get 远程主机下文件的路径 将文件保存到本地电脑的路径
sftp> put 本地文件的路径 将文件版保存到远程主机的路径
progress 切换是否显示文件传输进度。
mkdir <dir> 在远程服务器上创建目录;
lmkdir <dir> 在本地系统上创建目录。
exit/quit/bye 退出sftp。
! 启动一个本地shell。
! <commandline> 执行本地命令行。
其他命令还有:chgrp, chmod, chown, ln, lumask, rename, rm, rmdir, symlink, version。
安装
在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器。
打开命令终端窗口,按以下步骤操作。
0、查看openssh的版本
1
|
ssh
-V
|
使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级。
1、创建sftp组
1
|
groupadd
sftp
|
2、创建一个sftp用户,用户名为mysftp,密码为mysftp
修改用户密码和修改Linux用户密码是一样的。
useradd -g sftp -s /bin/false mysftp //用户名
passwd mysftp //密码
1
2
|
useradd
-g
sftp
-s
/bin/false
mysftp
passwd
mysftp
|
3、sftp组的用户的home目录统一指定到/data/sftp下,按用户名区分,这里先新建一个mysftp目录,然后指定mysftp的home为/data/sftp/mysftp
1
2
|
mkdir
-p
/data/sftp/mysftp
usermod
-d
/data/sftp/mysftp
mysftp
|
4、配置sshd_config
文本编辑器打开 /etc/ssh/sshd_config
1
|
vi
/etc/ssh/sshd_config
|
找到如下这行,用#符号注释掉,大致在文件末尾处。
1
|
# Subsystem sftp /usr/libexec/openssh/sftp-server
|
在文件最后面添加如下几行内容,然后保存。
1
2
3
4
5
6
|
Subsystem
sftp
internal-
sftp
Match Group
sftp
ChrootDirectory
/data/sftp/
%u
ForceCommand internal-
sftp
AllowTcpForwarding no
X11Forwarding no
|
5、设定Chroot目录权限
1
2
|
chown
root:
sftp
/data/sftp/mysftp
chmod
755
/data/sftp/mysftp
|
6、建立SFTP用户登入后可写入的目录
照上面设置后,在重启sshd服务后,用户mysftp已经可以登录。但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:
1
2
3
|
mkdir
/data/sftp/mysftp/upload
chown
mysftp:
sftp
/data/sftp/mysftp/upload
chmod
755
/data/sftp/mysftp/upload
|
7、修改/etc/selinux/config
文本编辑器打开/etc/selinux/config
1
|
vi
/etc/selinux/config
|
将文件中的SELINUX=enforcing 修改为 SELINUX=disabled ,然后保存。
在输入命令
1
|
setenforce 0
|
8、重启sshd服务
输入命令重启服务。
1
|
service sshd restart
|
9、验证sftp环境
用mysftp用户名登录,yes确定,回车输入密码。
1
|
sftp
mysftp@127.0.0.1
|
显示 sftp> 则sftp搭建成功。
10、使用FileZilla FTP Client连接SFTP服务器
输入主机IP地址、用户名、密码、端口连接SFTP服务器,端口默认为22。
FileZilla FTP Client下载
http://download.csdn.net/detail/xinxin19881112/8887755
使用示例
示例一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@jfht ~]
# stty erase ^H
[root@jfht ~]
# sftp 192.168.1.181
Connecting to 192.168.1.181...
root@192.168.1.181's password:
sftp
>
ls
-l *.gz
-rw-r--r-- 0 0 0 7770116 May 14 2010 mini.
tar
.gz
sftp
> lls *.gz
cn.
tar
.gz ct08.min.
tar
.gz files.20101216a.
tar
.gz
sftp
> get mini.
tar
.get
Couldn't stat remote
file
: No such
file
or directory
File
"/root/mini.tar.get"
not found.
sftp
> ^[[A
Invalid
command
.
sftp
> get mini.
tar
.gz
Fetching
/root/mini
.
tar
.gz to mini.
tar
.gz
/root/mini
.
tar
.gz 100% 7588KB 7.4MB
/s
00:01
sftp
> lls mini.
tar
.gz -l
-rw-r--r-- 1 root root 7770116 04-03 15:20 mini.
tar
.gz
sftp
> quit
[root@jfht ~]
#
|
问题思考
1. 在 sftp 登入之后的命令行中,如果按 Backspace 将会出现怪字符 ^H, 怎样才能使 Backspace 产生它应有的作用?(2012.06.11)
2. 怎样才能做到 sftp 免登录?这样做之后,一是可以免去输入密码的麻烦,二是可以在脚本中使用了。(2012.06.11)
3. 怎样用 sftp 来调用一系列已经编写好的命令,比如先进入某个目录,然后下载其下的文件,然后退出。(2012.06.11)