sftp批量下载文件的shell脚本

Sftp不同于ftp,不能将密码直接编码进程序指令(sftp没有提供选项如 -i ),因为使用sftp指令,会自动请求用户输入密码,所以输入密码的方式就成为难点,在shell脚本中sftp输入密码的方式有三种:

1. lftp方式

LFTP是一款非常著名的字符界面的文件传输工具(如果没有该工具,需要预先安装),支持FTP、HTTP、FISH、SFTP、HTTPS和FTPS协议,命令:

lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT}<

2. expect方式(一问一答方式 expect发送密码)

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预(需要预先安装tcl+再安装expect包)

# SFTP非交互式操作取文件
sftp_download()
{
    expect <<- EOF
    set timeout 5
    spawn sftp  -P $GET_PORT $GET_USER@$GET_IP

    expect { 
        "(yes/no)?" {send "yes\r"; expect_continue }
        "*assword:" {send "$GET_PASSWORD\r"}
    }
    expect "sftp>"
    send "cd $GET_DATA_PATH \r"
    expect "sftp>"
    send "lcd $NEW_SAVE_FILE_PATH \r"
    expect "sftp>"
    set timeout -1
    send "mget $fileFilter \r"
    expect "sftp>"
    send "bye\r"
EOF
}

3. 生成密钥对(推荐)

该方式不需要把口令写进程序指令里,所以更加安全。

第一步:生成密匙对,我用的是rsa的密钥。使用命令 "ssh-keygen -t rsa"

 ssh-keygen -t rsa

生成的过程中会提示输入密钥对保存位置,回车,接受默认值就行了。接着会提示输入一个不同于你的password的密码,可以输入,也可以直接回车,让它空着,随后执行ls -al,即可在当前目录下找到一个.ssh的目录。

sftp批量下载文件的shell脚本_第1张图片

公共密钥保存在 ~/.ssh/id_rsa.pub
私有密钥保存在 ~/.ssh/id_rsa

之后把这个密钥对中的公共密钥复制到你要访问的机器上去: 

  /home/social/.ssh/authorized_keys  (存放目录)

到主机A中执行命令和主机B建立信任,例(假设主机B的IP为:128.1.136.128):

scp ~/.ssh/id_rsa.pub 128.1.136.128:/home/social/.ssh/authorized_keys

 

你可能感兴趣的:(sftp批量下载文件的shell脚本)