sftp是Secure File Transfer Protocol的缩写,中文名称安全文件传送协议。其可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
我们可以在Linux 终端使用 sftp 命令操作 sftp 服务器里面的文件,如下:
[iteblog@www.iteblog.com ~]$ sftp -oPort=22 iteblog@sftp.iteblog.com Connecting to sftp.iteblog.com... iteblog@sftp.iteblog.com's password: sftp> ls / /iteblog.txt sftp> ls -l /iteblog.txt -rw-r--r-- 2 50049 50049 4096 Jun 21 03:23 /iteblog.txt sftp>
如果 sftp 使用的端口是非22,那么我们可以指定 -oPort
选项;iteblog@sftp.iteblog.com
的含义是 用户名@SFTP服务器地址。我们还很可能在 Shell 中使用 SFTP,本文将介绍几种在 Shell 中使用 sftp
的方法。
使用lftp命令
使用lftp命令主要有以下几种方法:
#!/bin/sh HOST=sftp.iteblog.com USER=iteblog PASSWD=iteblog_hadoop lftp<<END_SCRIPT open sftp://$HOST user $USER $PASSWD ls / bye END_SCRIPT
我们可以如下使用
lftp sftp://$USER:$PASSWD@$HOST -e "ls /; bye"
使用sshpass命令
我们首先得安装 sshpass
,这里以 CentOS 为例,运行下面的命令:
cd /etc/yum.repos.d/ wget http://download.opensuse.org/repositories/home:Strahlex/CentOS_CentOS-6/home:Strahlex.repo yum install sshpass
如果直接yum install sshpass,可能会遇到以下的错误:
[iteblog@www.iteblog.com ~]$ sudo yum install sshpass Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile Setting up Install Process No package sshpass available. Error: Nothing to do
安装完 sshpass
命令之后,现在我们可以操作 sftp 里面的文件了:
#!/bin/sh HOST=sftp.iteblog.com USER=iteblog PASSWD=iteblog_hadoop export SSHPASS=$PASSWD sshpass -e sftp -oBatchMode=no -b - $USER@$HOST << ! ls / bye !
使用expect命令
首先也是得安装 expect
命令,如下:
Ubuntu平台 sudo apt-get install expect CentOS平台 yum install expect
然后可以如下操作 sftp:
#!/usr/bin/expect HOST=sftp.iteblog.com USER=iteblog PASSWD=iteblog_hadoop spawn sftp $USER@$HOST expect "password:" send "$PASSWD\n" expect "sftp>" send "ls -l\n" expect "sftp>" send "exit\n" interact
如果你遇到如下的错误:
sftp.sh: line 27: send: command not found sftp.sh: line 28: interact: command not found
请记住,使用 expect 命令的时候,我们必须通过 ./sftp.sh
方式来运行这个脚本,不能使用 sh sftp.sh
方式。
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【几种在Shell脚本中使用sftp命令的方法】(https://www.iteblog.com/archives/2174.html)