[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命令主要有以下几种方法:
#!/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
,这里以 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
命令,如下:
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
方式。