前言

在实际工作中,经常会将本地的一些文件传送到远程的机器上。scp是一个很好用的命令,缺点是需要手工输入密码。

如何在shell脚本中实现传输文件,而不用手工输入密码呢?接下来介绍三种方法。

一、建立SSH的信任关系(不推荐)

过程较繁琐,故不考虑这种情况,有兴趣可以参考博客最后给出的链接。

二、使用sshpass工具(推荐)

2.1 sshpass工具的安装(介绍两种方式)

先检查系统有没有sshpass

whereis sshpass

a. yum安装

yum install sshpass

b. 源码安装

sshpass安装包下载地址:https://sourceforge.net/projects/sshpass/files/

解压安装

tar -zxvf sshpass-1.06.tar.gz
cd sshpass-1.06
./configure
make
make install

2.2 sshpass工具的使用

测试是否安装成功

man sshpass

使用 sshpass -p password scp file user@ip:dir, 示例如下

sshpass -p oracle scp /home/oracle/single.txt oracle@192.168.56.12:/home/oracle

三、使用expect工具

3.1 expect工具的安装(介绍两种方式)

先检查系统有没有expect

whereis expect

a. yum安装

yum install expect

b. 源码安装

expect工具是依赖tcl的,所以也需要安装tcl

tcl安装包下载地址:https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz

解压安装

tar zxvf tcl8.4.19-src.tar.gz
cd tcl8.4.19/unix
./configure
make
make install

expect安装包下载地址:http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz

解压安装

tar -zxvf expect5.45.tar.gz
cd expect5.45
./configure --with-tcl=/usr/local/lib --with-tclinclude=../tcl8.4.19/generic
make
make install
ln -s /usr/local/bin/expect /usr/bin/expect

3.2 expect工具的使用  

测试是否安装成功

expect

出现下面界面就表示安装成功

expect1.>
expect1.> exit

通过一个示例,演示如何使用expect

a.先创建一个脚本

vi test.exp

#!/usr/bin/expect
set timeout -1
spawn scp /home/oracle/single.txt oracle@192.168.56.12:/home/oracle
expect "*password:"
send "oracle\n" #这里填远程用户的密码
expect "100%"
expect eof

b.测试运行脚本

chmod +x test.exp
expect test.exp

c.将脚本加到crontab里

crontab -e

* * * * * expect /home/oracle/test.exp &> /home/oracle/test.log

expect比sshpass用起来更复杂,但expect功能更加强大,并不仅仅适用于scp,还适用于其它很多需要交互的命令。

参考文档:
《几种方法来实现scp拷贝时无需输入密码》:https://blog.csdn.net/nfer_zhuang/article/details/42646849
《sshpass的安装使用》:https://blog.csdn.net/qq_30553235/article/details/78711491
《Expect工具的安装及使用方法》:https://blog.csdn.net/wangtaoking1/article/details/78268574

Linux - 几种方法来实现scp拷贝时无需输入密码的更多相关文章

  1. 几种方法来实现scp拷贝时无需输入密码

    欢迎转载!转载时请注明出处:http://blog.csdn.net/nfer_zhuang/article/details/42646849 前言 我在工作中经常要将一些文件传输到另外一个服务器上, ...

  2. Java字符串比较(3种方法)以及对比 C++ 时的注意项

    字符串比较是常见的操作,包括比较相等.比较大小.比较前缀和后缀串等.在 Java 中,比较字符串的常用方法有 3 个:equals() 方法.equalsIgnoreCase() 方法. compar ...

  3. 几种方法实现ajax请求内容时使用浏览器后退和前进功能

    ajax是一个非常好玩的小东西,不过用起来也会存在一些问题. 我们可以利用ajax进行无刷新改变文档内容,但是没办法去修改URL,即无法实现浏览器的前进与后退.书签的收藏功能. 利用location的 ...

  4. 通过scp拷贝文件时无需交互输入密码

    工作中经常需要把一些文件从一个服务器传输到另一台服务器,linux环境下最习惯的方式当然是scp,但是scp需要交互输入密码有时候觉得麻烦,记录几种无需手动输入密码的方法. 方法一:建立SSH互信 此 ...

  5. js去掉字符串前后空格的五种方法

    转载 :http://www.2cto.com/kf/201204/125943.html 第一种:循环检查替换[javascript]//供使用者调用  function trim(s){  ret ...

  6. js去掉字符串前后空格的五种方法(转)

    出处:http://www.2cto.com/kf/201204/125943.html 第一种:循环检查替换[javascript]//供使用者调用  function trim(s){  retu ...

  7. 【转】VC 多线程中控制界面控件的几种方法

    原文网址:https://software.intel.com/zh-cn/blogs/2010/11/30/vc-3 为了保证界面的用户体验经常要把数据处理等放到子线程中进行,然后把结果更新到主界面 ...

  8. ToStringBuilder学习(二):两种方法用法优缺点及一个问题

    研究ApacheCommon源码, 先从一个最简单的开始,即围绕Object类里的toString方法自动化实现的一系列类.         怎么来自动化地实现toString方法, 有两种:反射和手 ...

  9. 修改android的wifi客户端名称的两种方法

    修改android的wifi客户端名称的两种方法     手机连接到无线路由时,在dhcp的客户端列表里面是这样的名称"android-89425253e5de3a2",这就是安卓 ...

随机推荐

  1. win 10 命令行导出注册表

    命令如下: reg  export  注册表中的key  保存路径 reg export HKLM\Software\MyCo\MyApp AppBkUp.reg 如果需要直接覆盖原来的文件,可以加上 ...

  2. ansible+playbook 搭建lnmp环境

    用三台机器 做ansible+playbook 搭建lnmp环境 IP分配 ansible 主机192.168.202.132 lnmp第一台主机 192.168.202.131 lnmp第一台主机 ...

  3. react后台项目开发(一)

    1. 项目开发准备 描述项目 技术选型 api 接口(4部分:3请求{url,请求方式,请求参数格式}, 1响应数据格式)/ 接口文档/ 测试接口 2. 启动项目开发 使用react脚手架创建项目 开 ...

  4. ElementPath

    ElementTree库附带了一个简单的类似XPath的路径语言ElementPath主要区别在于,可以在ElementPath表达式中使用{namespace}标记符号但是,诸如值比较和函数之类的高 ...

  5. table-layout:fixed

    table-layout: fixed; 在table上设置上面属性后,如果不设置td的宽度,那么所有td的宽度平分总table宽度.如果设置了td的宽度,则以设置的宽度为准. table-layou ...

  6. SSM整合1(springMVC+mybatis)

    整合目标:控制层采用springmvc.持久层使用mybatis实现 整合思路: Dao层: 1.SqlMapConfig.xml,空文件即可,但是需要文件头. 2.applicationContex ...

  7. 【Angular】父组件监听子组件事件(传参)

    Angular官方文档Demo地址:>component-interaction#parent-listens-for-child-event 举一个自己在写的项目

  8. vue slot内容分发

    当需要让组件组合使用,混合父组件的内容和子组件的模板的时候,就会用到slot.这个过程就叫内容分发. 最为常用的是两种slot:一种是匿名slot, 一种是具名slot. 匿名 很好理解: 就是默认, ...

  9. OPENGL 入门

    检测设备支持版本,判断是否支持opengl 2.0版本 初始化设置OpenGLES2.0 实现接口GLSurfaceView.Renderer 渲染 绘制图形 1.检测设备支持版本,判断是否支持ope ...

  10. Python完全平方数

    python解题源代码如下: import math """ 简述:一个整数,它加上100和加上268后都是一个完全平方数 提问:请问该数是多少? Python解题思路分 ...