背景:
有一台主机,安装了windows7,在其安装了virtualbox,然后安装了ubuntu虚拟机。在windows7上安装SecureCRT来ssh连接ubuntu虚拟机。一般在windows上面下载软件,然后通过vsftp上传到ubuntu虚拟机上。但是这样非常麻烦,现在考虑使用sftp协议来直接传输。
方案:
使用SecureCRT软件ssh连接到ubuntu虚拟机。然后在SecureCRT上面打开SFTP会话,如下图所示:
SFTP命令
进入到sftp命令窗口以后,就可以通过sftp命令来进行文件互传的操作。下面主要介绍一下sftp命令的含义。
- sftp> help
- Available commands:
- ascii Set transfer mode to ASCII
- binary Set transfer mode to binary
- cd path Change remote directory to 'path'
- lcd path Change local directory to 'path'
- detail remote-path Display system information about remote
- file or folder
- ldetail local-path Display system information about local
- file or folder
- chgrp group path Change group of file 'path' to 'group'
- chmod mode path Change permissions of file 'path' to 'mode'
- chown owner path Change owner of file 'path' to 'owner'
- exit Quit sftp
- help Display this help text
- include filename Include commands from 'filename'
- Alternate: < filename
- get [-r][-a | -b] remote-path Download file
- -r downloads directory recursively
- force ascii (-a) or binary (-b) mode
- ln [-s] existingpath linkpath Hardlink / symlink remote file
- ls [options] [path] Display remote directory listing
- lls [options] [path] Display local directory listing
- mkdir path Create remote directory
- lmkdir path Create local directory
- mv oldpath newpath Move remote file
- lmv oldpath newpath Move local file
- open [user@]host[:port] Connect to remote host
- put [-r][-a | -b] local-path Upload file
- -r uploads directory recursively
- force ascii (-a) or binary (-b) mode
- pwd Display remote working directory
- lpwd Print local working directory
- quit Quit sftp
- rename oldname newname Rename remote file
- lrename oldname newname Rename local file
- rmdir path Remove remote directory
- lrmdir path Remove local directory
- rm path Delete remote file
- lrm path Delete local file
- su username Substitutes the current user
- This is only supported with VShell for
- Windows 3.5 or later.
- type [transfer-mode] Display or set file transfer mode
- view remote-path Download and open file
- version Display protocol version
翻译一下就是:
- sftp-- help
- 可用命令:
- cd 路径 更改远程目录到“路径”
- lcd 路径 更改本地目录到“路径”
- chgrp group path 将文件“path”的组更改为“group”
- chmod mode path 将文件“path”的权限更改为“mode”
- chown owner path 将文件“path”的属主更改为“owner”
- exit 退出 sftp
- help 显示这个帮助文本 get 远程路径 下载文件
- ln existingpath linkpath 符号链接远程文件
- ls [选项] [路径] 显示远程目录列表
- lls [选项] [路径] 显示本地目录列表
- mkdir 路径 创建远程目录
- lmkdir 路径 创建本地目录
- mv oldpath newpath 移动远程文件
- open [用户@]主机[:端口] 连接到远程主机
- put 本地路径 上传文件
- pwd 显示远程工作目录
- lpwd 打印本地工作目录
- quit 退出 sftp
- rmdir 路径 移除远程目录
- lrmdir 路径 移除本地目录
- rm 路径 删除远程文件
- lrm 路径 删除本地文件
- symlink existingpath linkpath 符号链接远程文件
- version 显示协议版本
我们主要用到的就是一下六个命令
- cd 路径 更改远程目录到“路径”
- lcd 路径 更改本地目录到“路径”
- ls [选项] [路径] 显示远程目录列表
- lls [选项] [路径] 显示本地目录列表
- put 本地路径 上传文件 get 远程路径 下载文件
这里在详细说明一下远程目录和本地目录。
远程目录:ls查看到的是ubuntu虚拟机上面的目录
本地目录:lls查看到的是windows实体机上面的目录。
实例:
假设我需要实现windows下的e:\sftp\test1.txt和ubuntu下/home/enadmin/test2.txt的互换,可以进行一下操作:
put操作:windows->linux
查看目录权限
- root@BJCGNMON01:/home# ll
- total 20
- drwxr-xr-x 5 root root 4096 Apr 18 15:21 ./
- drwxr-xr-x 24 root root 4096 Jan 3 14:14 ../
- drwxr-xr-x 9 enadmin enadmin 4096 Apr 18 15:22 enadmin/
- drwxr-xr-x 2 root root 4096 Apr 18 15:21 sftp/--可以看到sftp的权限是root的
- drwxr-xr-x 2 root root 4096 Apr 18 14:57 test/
- root@BJCGNMON01:/home# chown -R enadmin.enadmin sftp/
- root@BJCGNMON01:/home# ll
- total 20
- drwxr-xr-x 5 root root 4096 Apr 18 15:21 ./
- drwxr-xr-x 24 root root 4096 Jan 3 14:14 ../
- drwxr-xr-x 9 enadmin enadmin 4096 Apr 18 15:22 enadmin/
- drwxr-xr-x 2 enadmin enadmin 4096 Apr 18 15:21 sftp/--修改以后权限变成enadmin的了
- drwxr-xr-x 2 root root 4096 Apr 18 14:57 test/
拷贝文件
- sftp> put test* --初始想将文件从windows系统put到ubuntu系统,发现失败,提示拒绝访问
- Uploading test1.txt to /home/test1.txt
- put: failed to upload e:/sftp/test1.txt. 拒绝访问。
- Uploading test2.txt to /home/test2.txt
- put: failed to upload e:/sftp/test2.txt. 拒绝访问。
- Uploading test3.txt to /home/test3.txt
- put: failed to upload e:/sftp/test3.txt. 拒绝访问。
- sftp> pwd --查看当前目录是/home目录,权限是root的
- /home
- sftp> cd /home/enadmin/ --我切换到enadmin目录下
- sftp> ls
- Graphs.pm msmtp ntp
- sent smokeping.tar.gz smokepingrtt.tar.gz
- smokepingrtt2.tar.gz Target wqy
- wqy-zenhei-0.8.38-1.deb
- sftp> lls
- test1.txt test2.txt test3.txt
- sftp> put test* -再次尝试将windows下的文件put到/homg/enadmin目录下,这次成功
- Uploading test1.txt to /home/enadmin/test1.txt
- 100% 4 bytes 4 bytes/s 00:00:00
- e:/sftp/test1.txt: 4 bytes transferred in 0 seconds (4 bytes/s)
- Uploading test2.txt to /home/enadmin/test2.txt
- 100% 4 bytes 4 bytes/s 00:00:00
- e:/sftp/test2.txt: 4 bytes transferred in 0 seconds (4 bytes/s)
- Uploading test3.txt to /home/enadmin/test3.txt
- 100% 5 bytes 5 bytes/s 00:00:00
- e:/sftp/test3.txt: 5 bytes transferred in 0 seconds (5 bytes/s)
- sftp> cd /home/sftp/--在修改sftp目录权限以后,再次切换到sftp目录下
- sftp> ls
- sftp> lls
- test1.txt test2.txt test3.txt
- sftp> put test* --这回put成功。所以跟权限相关
- Uploading test1.txt to /home/sftp/test1.txt
- 100% 4 bytes 4 bytes/s 00:00:00
- e:/sftp/test1.txt: 4 bytes transferred in 0 seconds (4 bytes/s)
- Uploading test2.txt to /home/sftp/test2.txt
- 100% 4 bytes 4 bytes/s 00:00:00
- e:/sftp/test2.txt: 4 bytes transferred in 0 seconds (4 bytes/s)
- Uploading test3.txt to /home/sftp/test3.txt
- 100% 5 bytes 5 bytes/s 00:00:00
- e:/sftp/test3.txt: 5 bytes transferred in 0 seconds (5 bytes/s)
注意点:这里需要注意权限的问题。加入我是使用enadmin账户初始连接ubuntu的,那么我put的文件只能放到文件夹权限是enadmin的目录下,不能放到文件夹权限是root的目录下。如果想放到文件夹权限是root的目录下,那么初始就使用root账户连接ubunut,然后再创建sftp会话,这样就可以了。
get操作:linux->windows
get操作没有权限设定
- sftp> pwd
- /home/enadmin
- sftp> lpwd
- e:/Documents
- sftp> lcd e:/sftp --切换目录
- sftp> lls
- rc.local test1.txt test2.txt
- test3.txt
- sftp> ls
- Graphs.pm msmtp ntp
- sent smokeping.tar.gz smokepingrtt.tar.gz
- smokepingrtt2.tar.gz Target test1.txt
- test2.txt test3.txt wqy
- wqy-zenhei-0.8.38-1.deb
- sftp> get Graphs.pm --下载文件到windows
- Downloading Graphs.pm from /home/enadmin/Graphs.pm
- 100% 13KB 13KB/s 00:00:00
- /home/enadmin/Graphs.pm: 13503 bytes transferred in 0 seconds (13 KB/s)
- sftp> lls --查看windows目录
- Graphs.pm rc.local test1.txt
- test2.txt test3.txt
- sftp>