`

scp 在脚本中使用输入密码的解决方法

scp 
阅读更多

第一种方法,用到了expect。

 

脚本如下:

 

#! /usr/bin/expect -f 

spawn scp 1 koven@192.168.0.2: 

expect "*password:" 

send "your password\r"

 

expect eof 

 

当然不只是scp,其它命令也可以用expect自动化 

 

循环处理: 

spawn scp 1 koven@192.168.0.2: 

for { set i 1 } {$i<500} {incr i} { 

expect {"*password:" {send "koven\r"} 

"*(yes/no)*" {send "yes\r"} 

注意大括号之间有空格 。

 

 

第二种方法,使用密钥文件。

 

 

 

这里假设主机A(192.168.100.3)用来获到主机B(192.168.100.4)的文件。

 

在主机A上执行如下命令来生成配对密钥:

ssh-keygen -t rsa

 

遇到提示回车默认即可,公钥被存到用户目录下.ssh目录,比如root存放在:

 

/root/.ssh/id_rsa.pub

 

将 .ssh 目录中的 id_rsa.pub 文件复制到 主机B 的 ~/.ssh/ 目录中,并改名为 authorized_keys,

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

 

scp ~/.ssh/id_rsa.pub 192.168.100.4:/root/.ssh/authorized_keys

 

下面就可以用scp、ssh命令不需要密码来获取主机B的文件了

ssh 192.168.100.4 回车就不需要密码了。

 

注:其实id_rsa.pub内容添加到对方机器的authorized_keys中就行了。

 

-----------------------------------------------------------------------------------------------------

 

#!/usr/bin/expect -f

 

set password 密码

 

spawn scp 用户名@目标机器ip:拷贝文件的路径 存放本地文件的路径 

set timeout 300 

expect "用户名@目标机器ip's password:" #注意:这里的“用户名@目标机器ip” 跟上面的一致

set timeout 300 

send "$password\r"

set timeout 300 

send "exit\r"

 

expect eof

 

附:scp参数

-r:拷贝目录

-c:允许压缩

 

一个完整的例子

 

#!/usr/bin/expect -f

set password 123456

#download

spawn scp root@192.168.1.218:/root/a.wmv /home/yangyz/

set timeout 300 

expect "root@192.168.1.218's password:"

set timeout 300 

send "$password\r"

set timeout 300 

send "exit\r"

expect eof 

 

#upload

spawn scp /home/yangyz/abc.sql root@192.168.1.218:/root/test.sql 

set timeout 300 

expect "root@192.168.1.218's password:"

set timeout 300 

send "$password\r"

set timeout 300 

send "exit\r"

expect eof

 

 

 

########

PS:需要先安装expect 

分享到:
评论

相关推荐

    通过秘钥实现scp不输入密码传送文件

    通过秘钥实现scp不输入密码传送文件,作成脚本可以实现远程备份等等实用功能.

    Shell模拟密码输入

    shell模拟密码输入功能,输入密码显示“*”,具有退格键功能,回车键完成密码输入。

    shell结合expect写的批量scp脚本工具

    但我到现在还在对python的恐惧之中(虽然已经在空闲时间努力去学习了),所以使用了shell和expect脚本结合的方式,写了这个批量scp的脚本工具。 expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh...

    bash脚本输入密码不回显问题的解决方法

    不绕圈子,揭晓答案:设置终端状态为“字符不回显”(如果你了解过termios的话,也一定听说过) 方法就是... 您可能感兴趣的文章:解决ssh远程登陆linux显示-bash-4.1$的问题bash脚本中将密码传递给ssh/scp命令方法详解

    Shell脚本实现自动输入密码登录服务器

    使用Linux的程序员对输入密码这个举动一定不陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得输入密码,比如使用超级用户执行命令,又比如ftp、ssh连接远程主机等等,如下图: 那么问题来了,在...

    Jsch批量执行多条命令,包含切换用户输入密码

    参考expect4j的交互式操作方式控制输入输出流实现批量执行多条shell命令同时支持切换用户输入密码提权执行命令输入密码等操作 有完整的测试用例,便于理解 模板化执行命令示例 [$]send[su - root] [Password:]...

    shell脚本无密码登录 expect的使用方法详解

    shell脚本无密码登录 expect的使用方法详解 今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。 从网上查到使用...

    Linux主机如何实现无需输入密码的远程登录或脚本远程执行

     2)用python脚本模拟scp命令的密码输入过程,避免每次手工输密码。  本文依次进行介绍。  1、建立主机间的ssh信任关系实现不输入密码的登录  假设需要建立从usr1@localhost到usr2@remote这两对(主机,...

    sftp,ssh 免输入密码访问

    大多对密级要求较高的...信任公钥(对称公钥)方法解决了每次都输入密码的问题:使用客户端生成密钥钥对,将公钥添加到服务器的信任公钥表中,即完成了服务器对客户端信任的添加,再次使用SCP或者SFTP则不需要密码。

    在Linux中快速部署桌面远程连接和安装多种虚拟机制作操作系统镜像,附使用教程.zip

    在Linux中快速部署桌面远程连接和安装虚拟机,可以在任何客户端比如windows或者macos远程连接到linux桌面,可以用来制作openstack镜像,在镜像初始化的时候设置用户名和密码,解决虚拟机制作windows xp、windows 7、...

    嵌入式系统/ARM技术中的Linux 下通过脚本实现远程自动备份

    为了克服这个问题,首先需要实现不需要密码的SSH登陆,这样就可以使用rsync,scp,rexec等命令来做的远程备份了。  1. 设置无需密码的ssh登陆,方法如下:  假设A,B两服务器,现在需要在A机上用root登陆B机,而...

    linux使用mysqldump+expect+crontab实现mysql周期冷备份思路详解

    我们使用过mysqldump都知道,使用该命令后,需要我们手动输入 mysql的密码,那么我们就不能够直接在crontab中使用mysqldump实现周期备份。其实我们可以使用expect脚本自动输入密码,从而实现真正的周期备份。如果你...

    在CentOS / RHEL上设置 SSH 免密码登录的方法

    自动登录也就是说,要在 shell 脚本中使用ssh,而无需要输入任何密码。 本文会告诉你怎样在 CentOS/RHEL 上设置 SSH 免密码登录。自动登录配置好以后,你可以通过它使用 SSH (Secure Shell)和安全复制 (SCP)来...

    一键配置集群各节点ssh免密码登录

    一键配置集群各节点ssh免...1 在ip.txt中输入各节点ip地址,一行一个ip 2 修改scp_to_cluster.sh和copy_id.sh的服务器用户名和密码 3 运行如下命令 # chmod 777 ./* #./distribute_file.sh ../auto_ssh /root/script

    autopass:类似expect实现密码自动输入,同时比expect用法更简单

    该脚本由bash shell实现,功能类似expect,ssh到远程主机可以实现自动输入密码(密码验证模式下),用法比expect简单很多。 示例如下: $ ./autopass Usage: autopass -h host [-u user] [-p port] [-k password |...

    linux中expect的介绍与使用示例

    expect是一种自动交互语言,能实现在shell脚本中为scp和ssh等自动输入密码自动登录。下面这篇文章主要介绍了linux中使用expect的方法示例,需要的朋友可以参考借鉴,下面来一起学习学习吧。

    sshpass-1.05-1.el6.rf.x86_64.rpm下载

    在Linux后台中,经常会用到ssh、scp等命令。需要进行认证,手动输入密码,是交互式的过程。当将ssh、scp等命令做成自动化脚本时,可能需要非交互式的登录过程,此时可以用sshpass。

    网管教程 从入门到精通软件篇.txt

    IV:Open Inventor中使用的文件格式 IVD:超过20/20微观数据维数或变量等级文件 IVP:超过20/20的用户子集配置文件 IVT:超过20/20表或集合数据文件 IVX:超过20/20微数据目录文件 IW:Idlewild屏幕保护程序 ...

    Ubuntu权威指南(2/2)

    5.15.7 在命令行中使用引号 131 5.16 排序 132 第6章 编辑文件 133 6.1 启动vim编辑器 134 6.1.1 创建文件 134 6.1.2 状态行 135 6.2 vim编辑器的两种工作模式 135 6.2.1 输入模式 135 6.2.2 命令模式 135 6.3 保存...

Global site tag (gtag.js) - Google Analytics