Linux | SFTP

  • SFTP

SSH 文件传输协议

FTP,即文件传输协议,是一种流行的、未加密的在两个远程系统之间传输文件的方法。

在计算机领域,SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secure File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP或字母缩写:SFTP)是一数据流连线,提供文件存取、传输和管理功能的网络传输协议。

由互联网工程任务组(IETF)设计,透过SSH 2.0 的扩展提供安全文件传输能力,但也能够被其他协议使用。

即使IETF在网络草案资料阶段时,这个协议是在SSH-2文件中描述,它能够使用在许多不同的应用程序,例如安全文件传输在传输层安全(TLS)和传输信息管理于虚拟专用网应用程序。

这个协议是假设执行在安全信道,例如SSH,服务器已经认证客户端,并且客户端用户可利用协议。

与 FTP 协议相比,在几乎所有情况下,SFTP 都比 FTP 更可靠,因为它具有潜在的安全功能并且能够搭载 SSH 连接。 FTP 是一种不安全的协议,只能在有限的情况下或您信任的网络上使用。

连接

默认情况下,SFTP 使用 SSH 协议进行身份验证并建立安全连接。 因此,可以使用 SSH 中存在的相同身份验证方法。

虽然默认情况下可以使用密码进行身份验证,但建议创建 SSH 密钥并将您的公钥传输到您需要访问的任何系统。 这更加安全,从长远来看可以节省您的时间。

首先测试 SSH连接是否有效

ssh randy@your_server_ip_or_remote_hostname

(base) qiancj@qiancj-HP-ZBook-G8:~$ ssh randy@10.88.2.13
sesame@10.XXX.XXX.XXX's password: 
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-97-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

531 updates can be applied immediately.
260 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

New release '20.04.6 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Your Hardware Enablement Stack (HWE) is supported until April 2023.
Last login: Fri Jun  2 16:41:51 2023 from 10.78.3.19

如果上述有效,则退出

exit

(base) sesame@SanJie:~$ exit
logout
Connection to 10.88.2.13 closed.

现在建立SFTP会话:

sftp randy@your_server_ip_or_remote_hostname

(base) qiancj@qiancj-HP-ZBook-G8:~$ sftp sesame@10.88.2.13
sesame@10.88.2.13's password: 
Connected to 10.88.2.13.

此时连接到远程系统,提示也会更改为sftp的提示

如果使用了自定义的SSH 端口号(默认为22),打开SFTP会话时可以设定端口号

sftp -oPort=custom_port randy@your_server_ip_or_remote_hostname

这样会通过指定的端口连接到远程系统

获取SFTP帮助

使用命令:

  sftp> help
  或
  sftp> ?

结果如下:

sftp> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp [-h] grp path                Change group of file 'path' to 'grp'
chmod [-h] mode path               Change permissions of file 'path' to 'mode'
chown [-h] own path                Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                 filesystem containing 'path'
exit                               Quit sftp
get [-afpR] remote [local]         Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln [-s] oldpath newpath            Link remote file (-s for symlink)
lpwd                               Print local working directory
ls [-1afhlnrSt] [path]             Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-afpR] local [remote]         Upload file
pwd                                Display remote working directory
quit                               Quit sftp
reget [-fpR] remote [local]        Resume download file
rename oldpath newpath             Rename remote file
reput [-fpR] local [remote]        Resume upload file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help

查看及切换路径

遍历远程文件系统

我们可以使用一些功能类似于 shell 命令的命令来浏览远程系统的文件层次结构。

首先,通过找出我们当前在远程系统上的哪个目录来定位自己

sftp>pwd

sftp> pwd
Remote working directory: /home/sesame

查看远程系统当前目录的内容

sftp>ls

sftp> ls                                                                                    
Cognata                                                                                    Desktop                                                                                    
Documents                                                                                  Downloads                                                                                                                                                                        
nohup.out                                                                                  opt                                                                                        
pangweisong                                                                                qiancj                                                                                     
set_iptables.sh                                                                            shared_dir                                                                                                      

请注意,SFTP 界面中可用的命令不是典型 shell 语法的 1:1 匹配,也不是功能丰富的。

但是,它们确实实现了一些更重要的可选标志,例如将 -la 添加到 ls 以查看更多文件元数据和权限:

sftp>ls -la
  Outputdrwxr-xr-x    5 remote_money   remote_money       4096 Aug 13 15:11 .
  drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..
  -rw-------    1 remote_money   remote_money          5 Aug 13 15:04 .bash_history
  -rw-r--r--    1 remote_money   remote_money        220 Aug 13 15:02 .bash_logout
  -rw-r--r--    1 remote_money   remote_money       3486 Aug 13 15:02 .bashrc
  drwx------    2 remote_money   remote_money       4096 Aug 13 15:04 .cache
  -rw-r--r--    1 remote_money   remote_money        675 Aug 13 15:02 .profile
  . . .

进入到其他目录

sftp>cd testDirectory

sftp> cd qiancj

访问本地的文件系统

通过在命令前面加上一个 l(local) 来将命令指向本地文件系统。

sftp>lpwd

sftp> lpwd
Local working directory: /home/qiancj
sftp> lcd /home/qiancj/codes/sanjie

列出本地机器上当前目录的内容

sftp> lls

sftp> lls
ai_toolchain						        docker_backup   Music			     opt		 randy_File     tools
anaconda3						        Documents       node_modules		     package.json	 README.en.md   Videos
bin							        Downloads     	  package-lock.json	 README.md   
codes							        Edraw	           pcl_tar		 rviz	        wget-log
commandsQCJ						        eval	        NVIDIA_CUDA-11.4_Samples     Pictures		 shell	         
data							        happyRandy.sh   obsutil_linux_amd64.tar.gz   QCJLogo.sh		 tag
Desktop						        Legend.md       open3d_data		     Q.png		 Template

更改目录:

sftp> lcd Desktop

sftp> lcd ..

传输文件

从远程系统上下载文件到本地

sftp> get remoteFile
  OutputFetching /home/remote_money/remoteFile to remoteFile
  /home/remote_money/remoteFile                       100%   37KB  36.8KB/s   00:01

下载到本地并重命名

sftp> get remoteFile localFile

get 命令可以增加可选项,比如要拷贝目录及其下所有文件,可以使用-r选项

sftp> get -r someDirectory

使用 -P-p 标志维护适当的权限和访问时间

sftp> get -Pr someDirectory

传输本地文件到远程服务器

使用 put 命令:

sftp> put localFile

结果:

  sftp> put app_meta_randy.tar.gz  ./
  Uploading app_meta_randy.tar.gz to /home/sesame/qiancj/./app_meta_randy.tar.gz     

如果要传输文件夹及其内的文件,使用 put -r:

sftp> put -r localDirectory

sftp> put -r app_meta_randy/ ./
Uploading app_meta_randy/ to /home/sesame/qiancj/./app_meta_randy
Entering app_meta_randy/
Entering app_meta_randy/bin
app_meta_randy/bin/app_meta_randy                                                                                              100%  291KB  30.5MB/s   00:00    
app_meta_randy/start_nginx.sh                                                                                                             100%  221   244.9KB/s   00:00    
app_meta_randy/run.sh                                                                                                                     100% 1119     1.3MB/s   00:00    
Entering app_meta_randy/etc
app_meta_randy/etc/obstacle_segmentation.yaml                                                                                             100% 2563     1.9MB/s   00:00    
app_meta_randy/etc/preprocess.yaml                                                                                                        100%  823   955.9KB/s   00:00    
app_meta_randy/etc/freespace.yaml                                                                                                         100%  495   578.5KB/s   00:00    
app_meta_randy/etc/visual.yaml                                                                                                            100%  246   303.3KB/s   00:00    
app_meta_randy/etc/postprocess.yaml
....

下载和上传文件时有用的一个熟悉的工具是 df 命令,它的工作方式类似于命令行版本。

使用它,可以检查您是否有足够的空间来完成您感兴趣的传输:

sftp> df -h

Copy

  Output    Size     Used    Avail   (root)    %Capacity
    19.9GB   1016MB   17.9GB   18.9GB           4%

请注意,此命令没有本地变体,但我们可以通过发出 ! 命令来解决这个问题。

! 命令将我们带入本地 shell,我们可以在其中运行本地系统上可用的任何命令。 我们可以通过键入以下内容来检查磁盘使用情况:

sftp> !

然后回到了本地系统

df -h
  OutputFilesystem      Size   Used  Avail Capacity  Mounted on
  /dev/disk0s3   520Gi   52Gi  522Gi     9%    /
  devfs          188Ki  288Ki    0Bi   100%    /dev
  map -hosts       0Bi    0Bi    0Bi   100%    /net
  map auto_home    0Bi    0Bi    0Bi   100%    /home

返回到SFTP的会话:

exit

简单的文件操作

SFTP 允许执行某些类型的文件系统内务处理。 例如,可以更改远程系统上文件的所有者:

sftp> chown userID file

请注意,与系统 chmod 命令不同,SFTP 命令不接受用户名,而是使用 UID

而且,没有内置的方法可以从 SFTP 接口中知道适当的 UID

作为解决方法,可以从“/etc/passwd”文件中读取,该文件在大多数 Linux 环境中将用户名与 UID 相关联:

sftp> get /etc/passwd
sftp> !less passwd
  Outputroot:x:0:0:root:/root:/bin/bash
  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
  bin:x:2:2:bin:/bin:/bin/sh
  sys:x:3:3:sys:/dev:/bin/sh
  sync:x:4:65534:sync:/bin:/bin/sync
  games:x:5:60:games:/usr/games:/bin/sh
  man:x:6:12:man:/var/cache/man:/bin/sh
  . . .

请注意,这里不是单独给出 ! 命令,而是将其用作本地 shell 命令的前缀。 这适用于运行我们本地机器上可用的任何命令,并且可以更早地与本地 df 命令一起使用。

UID 将位于文件的第三列,由冒号字符划定。

同样,我们可以更改文件的组所有者:

sftp> chgrp groupID file

同样,没有内置的方法来获取远程系统组的列表。 我们可以使用以下命令解决它:

sftp> get /etc/group
sftp> !less group

结果:

  Outputroot:x:0:
  daemon:x:1:
  bin:x:2:
  sys:x:3:
  adm:x:4:
  tty:x:5:
  disk:x:6:
  lp:x:7:
  . . .

第三列包含与第一列中的名称关联的组的 ID。

chmod SFTP 命令在远程文件系统上正常工作:

sftp> chmod 777 publicFile

结果:

  OutputChanging mode on /home/remote_money/publicFile

没有等效的命令来操作本地文件权限,但可以设置本地 umask,以便复制到本地系统的任何文件都将具有其相应的权限。

这可以通过 lumask 命令来完成:

sftp> lumask 022

结果

  OutputLocal umask: 022

现在所有下载的常规文件(只要不使用 -p 标志)都将具有 644 权限。

SFTP 还允许分别使用 lmkdirmkdir 在本地和远程系统上创建目录。

其余文件命令仅针对远程文件系统:

sftp> ln
sftp> rm
sftp> rmdir

这些命令复制了它们的 shell 等价物的核心行为。 如果您需要在本地文件系统上执行这些操作,请记住可以通过发出以下命令进入 shell:

sftp> !

或者通过在命令前加上 ! 在本地系统上执行单个命令:

sftp> !chmod 644 somefile

完成 SFTP 会话后,使用“exit”或“bye”关闭连接。

sftp> bye

图形界面程序

当然可以使用 FileZilla ,XFTP等图形界面程序,设置好站点,以图形文件夹形式展示本地文件和服务器端文件,可直接左右拖拽文件到目标文件夹,方便电脑直接文件传输

FileZilla 界面:

设置站点

Reference


欢迎关注公众号【三戒纪元】

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux下如何使用sftp命令 2009年08月05日 星期三 10:03 linux下如何使用sftp命令。 sftp 是一個交互式文件傳輸程式。它類似於 ftp, 但它進行加密傳輸,比FTP有更高的安全性。下邊就簡單介紹一下如何遠程連接主機,進行文件的上傳和下載,以及一些相關操作。 舉例,如遠程主機的 IP 是 202.206.64.33或者是域名www.hebust.edu.cn,用戶名是 fyt ,在命令行模式下:sftp fyt@202.206.64.33或者 fyt@www.hebust.edu.cn。回車提示輸入密碼。進入提示符 sftp> 如果登陸遠程機器不是為了上傳下載文件,而是要修改遠程主機上的某些文件。可以 ssh fyt@202.206.64.33 (其實sftp就是ssh 的一個程式。) sftp> get /var/www/fuyatao/index.php /home/fuyatao/ 這條語句將從遠程主機的 /var/www/fuyatao/目錄下將 index.php 下載到本地 /home/fuyatao/目錄下。 sftp> put /home/fuyatao/downloads/Linuxgl.pdf /var/www/fuyatao/ 這條語句將把本地 /home/fuyatao/downloads/目錄下的 linuxgl.pdf文件上傳至遠程主機/var/www/fuyatao/ 目錄下。 你如果不知道遠程主機的目錄是什麼樣, pwd命令可以幫您查詢遠程主機的當前路徑。查詢本機當前工作目錄 lpwd. 改變路徑可以用cd ,改變本機路徑可以用 lcd; ls rm rmdir mkdir 這些命令都可以使用。同理調用本機都是加 l , 即 lls lrm. 要離開sftp,用exit 或quit、 bye 均可。詳細情況可以查閱 man sftp. 如果覺得在命令行模式下不太方便,可以 sudo apt-get install gftp。在圖形界面下操作就簡便多了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值