欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:978
  2. 浏览总数:11,952,771
  3. 评论:3936
  4. 分类目录:106 个
  5. 注册用户数:6116
  6. 最后更新:2018年12月15日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

几种在Shell脚本中使用sftp命令的方法

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。

sftp
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop

我们可以在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 方式。

本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【几种在Shell脚本中使用sftp命令的方法】(https://www.iteblog.com/archives/2174.html)
喜欢 (5)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!