原文链接:http://bbs.chinaunix.net/archiver/tid-508290.html

主要步骤如下:

1.为运行shell脚本的本地用户生成密钥对
2.将其中的公钥分发到sftp欲登录的远程服务器上
3.编写并以上面的本地用户运行shell脚本

一.生成密钥对

在shell脚本中使用sftp时必须用到密钥对(公钥和私钥).可使用下列方式生成(SSH 2.X版本),这里本地用户记为:local_user:

$ ssh-keygen -dsa

屏幕提示:

Generating public/private dsa key pair.

Enter file in which to save the key (/home/local_user/.ssh/id_dsa):
# 按回车保存为: /home/local_user/.ssh/id_dsa,即当前用户local_user的私钥

Enter passphrase (empty for no passphrase):
# 按回车,表示读取密钥时不需要密钥的密码

Enter same passphrase again:
# 确认密钥的密码,必须和上面的输入相同

Your identification has been saved in /home/local_user/.ssh/id_dsa.
# 私钥保存信息

Your public key has been saved in /home/local_user/.ssh/id_dsa.pub.
# 公钥保存信息

The key fingerprint is:
ec:41:e8:08:38:0b:f8:1e:bc:92:98:32:fc:d7:69:7d ...
# 密钥指纹

二.分发公钥

为了使用密钥,必须将公钥分发到欲登录的远程服务器上,这里远程服务器记为remote_host,欲登录的远程用户记为remote_user

1.copy公钥到欲登录的远程服务器的远程用户的家目录下,例如:

copy id_dsa.pub到remote_host:/home/remote_user/.ssh/

若目录/home/remote_user/.ssh/不存在,请先创建之.

2.将copy来的公钥文件改名为authorized_keys

3.修改公钥文件的访问权限

chmod 644 authorized_keys

三.示例

目标:

从远程服务器remote_host:/home/remote_user/data/
传送下列文件到本地计算机的当前目录: /home/local_user/data/:

20050201
20050202
20050203
20050204
20050205

方式1: 批模式

sftp提供了一个选项-b,用于集中存放sftp命令(该选项主要用于非交互模式的sftp).因此对于上面的目标,可以生成如下的命令文件:

cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit

这里存为: sftp_cmds.txt

说明: get命令前加一个"-"以防止其执行错误时sftp执行过程被终止.

以下为脚本示例:

#!/bin/sh
sftp -b ./sftp_cmds.txt remote_user@remote_host

方式二:

#!/bin/sh
sftp remote_user@remote_host << EOF
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
EOF

-----

如何在shell脚本里使用sftp批量传送文件(二)的更多相关文章

  1. 在shell脚本里使用sftp批量传送文件

    转至:https://blog.csdn.net/istronger/article/details/52141530?utm_medium=distribute.pc_relevant.none-t ...

  2. shell 脚本里的$(( ))、$( )、``与${ }的区别

    shell  脚本里的命令执行 1. 在bash中,$( )与` `(反引号)都是用来作命令替换的. 命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组 ...

  3. SHELL脚本里执行的东西需要多次回车确认,怎么实现自动回车确认?

    写了个自动配置的shell脚本,其中有几行是 …… ./build-key-server ./build-key-client …… 在执行build-key-server和build-key-cli ...

  4. Linux shell 脚本攻略之批量重命名

    摘自:<Linux shell 脚本攻略>

  5. 如何在shell脚本中导出数组供子进程使用

    功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环境变量.export可新增,修改或删除环境变量 ...

  6. 学以致用二十三-----shell脚本里调用脚本

    当前脚本可以调用其他目录下的脚本,并可以直接使用其他脚本里的函数. 首先查看脚本目录 执行net_set.sh,同时执行colos.sh 并可直接使用 color.sh中的函数 net_set.sh ...

  7. 在shell脚本里执行sudo 命令

      可以 : echo "yourpasswd" |sudo -S yourcommand 但是不安全,因为密码都显示在shell脚本里面了-_- 引自http://hi.baid ...

  8. shell脚本里切换用户执行命令的注意事项

    功能说明:用root用户执行一个脚本,脚本里需要切换到普通用户DT去执行其他命令,其中就用到了EOF,用法如下: #!/bin/bash su - DT<<EOF cd apache-to ...

  9. 使用shell脚本分析Nagios的status.dat文件

    前言 Nagios的安装和配置以及批量添加监控服务器在我前面的文章中已经讲的很详细了. 我们知道,Nagios的网页控制页面(一般为http://nagio.domain.com/nagios)里可以 ...

随机推荐

  1. 聊一聊如何用C#轻松完成一个SAGA分布式事务

    背景 银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的 ACID ,只能够通过分布式事务来解决. 市面上使用比较 ...

  2. rsync.sh

    #!/bin/bash file1=`du -sm /var/www/vhosts/|awk '{print $1}'` ps=`ps -C rsync --no-header|wc -l` if [ ...

  3. Kubernetes之日志和监控(十五)

    一.日志和监控 1.1.Log 1.1.1.容器级别 通过docker命令查看容器级别的日志 docker ps --->containerid docker logs containerid ...

  4. 中文分词,自然语言处理器NLP。 六月份版本已上线。

    一,  没有对比,就没有伤害,我们分词的优势在哪里?走一波测试. 跑一下CaCl2,看看效果. 二   想要分什么词汇,自己自定义即可. 目前每个月都会出一个新的版本,主要是和金融相关的词汇. 这是6 ...

  5. 自定义ASP.NET MVC Html标签辅助方法

    原文:https://blog.csdn.net/a497785609/article/details/50184779 在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性 ...

  6. OC和JS代码的互调

    01 OC调用JS的代码 NSString *str = [self.webView stringByEvaluatingJavaScriptFromString:@"sum()" ...

  7. js正则表达式 (.+)与(.+?)

    (.+)默认是贪婪匹配 (.+?)为惰性匹配 疑问号让.+的搜索模式从贪婪模式变成惰性模式. var str = 'aaa<div style="font-color:red;&quo ...

  8. ittun.com的使用方法

    [如果这篇文章对你有所作用,请加关注哦!] 步骤一: 进入官网http://ittun.com/ Windows 64位下载http://ittun.com/upload/17.2/ittun_win ...

  9. mysql导出csv格式命令

    mysql -h 127.0.0.1 -u user -p123456 -Bse "select name,age from user where age > 10;" | ...

  10. 如何使PreparedStatement支持命名参数

    http://m.blog.csdn.net/wallimn/article/details/3734242