利用expect完成scp输入密码

#!/usr/bin/expect
set timeout 60

if {$argc != 3} {
        send "usage followed by src,dst,password"
        exit
}

set src [lindex $argv 0]
set dst [lindex $argv 1]
set passwd [lindex $argv 2]
spawn scp $src $dst

expect {
           "yes/no" {
               send "yes\n"
               exp_continue
           } "password:" {
               send "$passwd\n"
           }
}
expect eof

可能还有些情况不能handle

时间: 2024-10-03 23:16:47

利用expect完成scp输入密码的相关文章

原!linux脚本 expect命令 完成 输入密码交互 进行scp远程文件拷贝

1.安装expect yum install  expect expect相关知识--- https://blog.csdn.net/lufeisan/article/details/53488395 2.脚本 注意事项 1)脚本 第一行  #!/usr/bin/expect 表明该脚本用`/usr/bin/expect`这个shell对文件进行解析 2)send "123456\n" , 有些脚本,如上面的链接地址里 是写  send "123456\r" ,但是

Centos ssh和scp利用expect自动填充密码

在命令行ssh远程登录服务器和scp远程传输文件都需要交互式输入密码,无法像MySQL登录数据库 mysql -uroot -p123456一样直接完成. 介绍在centos环境下,脚本依赖expect来达到这一目的,首先确认安装 expect 密码有特殊字符如$需要转义 ssh登录脚本,ip在执行脚本时动态输入: #!/usr/bin/expectset timeout 30set ip [lindex $argv 0 ]spawn ssh -l root $ipexpect "passwor

浅记初次使用expect、scp和Net::SCP::Expect、Net::SSH::Expect中出现的一些小问题

以前也学过一些shell,不过学得并不是很深入,动手写的代码的时间也不是很多.前不久将shell比较细的过了一遍,leader布置了任务让用shell写一个脚本将redis源码压缩包从一个服务器上传到另外一个服务器,同时在本服务器上传入命令,解压源码包并在另一个服务器上启动redis服务. 虽然学了一些shell,但是本次任务中需要使用的SCP和expect却是第一次使用,其中也遇到了一些问题,所以在这里总结一下. 现代的Shell对程序提供了最小限度的控制(开始,停止,等等),而把交互的特性留

ssh采用expect实现自动输入密码登录、拷贝

1. 引言 最近做了一个项目,需要频繁与另一台主机进行文件的传输:中间想到了很多方式:FTP.samba.curl等,但是还是感觉scp最好用. SCP使用教程可参阅:http://www.jb51.net/article/70919.htm 但scp也存在着一些问题,每次都需要输入目标机的密码,需人为手动干预,这个就比较烦了,那么有没有可以自动进行界面交互的命令呢? 答案当然是:有: expect喽 except使用教程:https://www.cnblogs.com/lixigang/art

通过expect执行scp,传输文件不完整的解决方法

写了一个脚本来传输文件,类似于这样: sendsystem(){ expect -c " spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/system01.dbf [email protected]$S_IP:$ORACLE_BASE/oradata/standby/ expect { yes/no { send \"yes\r\"; exp_continue } *assword* { send \"oracle\r\&quo

Linux下Expect 完成自动输入密码

今天要开发一个定时任务,然后加入cron列表中.但是有个问题摆在眼前,脚本的执行中需要输入数据库密码(貌似5.1版本以上不允许在-p后直接加密码,会报错) mysql -u root -p << SQL use db; set names utf8; `cat task.sql` SQL 运行上述代码后,会提示: Enter password: expect可以帮助我们完成这件事情: 将上述代码保存到一个文件中:db.sh 并且编写如下代码保存为db.exp: #!/usr/bin/expec

利用expect远程控制相关脚本

exe_start_agent.sh #!/bin/sh FILENAME="ip.file"cat $FILENAME|while read linedoeval `echo $line|awk '{print "IP="$1}'`eval `echo $line|awk '{print "USER="$2}'`eval `echo $line|awk '{print "PATHWORD="$3}'`echo "$

Shell结合Expect实现自动输入密码

Shell结合Expect自动输入密码示例 1 #!/bin/bash 2 3 cd /data/live 4 5 /usr/bin/expect <<-EOF 6 spawn git clone "ssh://xxxxxxxxxxxx" 7 expect "*passphrase*" 8 send "passwordhere\n" 9 expect eof 10 EOF 11 12 time=`/bin/date "+%Y

expect批量scp脚本

实验环境 1. 本地主机 192.168.1.17 2. 远程主机 192.168.1.18 192.168.1.19 实验目标 使用expect非交互式脚本与scp命令结合,实现scp批量传输本地文件到远程主机. 脚本注意事项 1. 确保本地主机已安装expect 2. 目标主机非第一次登陆,scp时,不需要输入"yes" 3. 注意列表文件与变量的顺序 #################################################################