[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)
喜欢 (21)
分享 (0)
发表我的评论
取消评论

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