scp 无密码传输
来源:互联网 发布:淘宝定制 编辑:程序博客网 时间:2024/05/02 07:39
expect 脚本名 参数
http://blog.sina.com.cn/s/blog_53ee3d050100du16.html
脚本如下:
#!/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.sqlroot@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
//命令行参数引用
# set Variables
set password [lrange $argv 0 0]
set ipaddr [lrange $argv 1 1]
set scriptname [lrange $argv 2 2]
set arg1 [lrange $argv 3 3]
set timeout -1
//函数使用
proc functionname { parameter1,parameter2 } {
......
}
调用子函数非常简单
functionname $param1 $param2
知其然。本文用一个最短的例子说明脚本的原理。
脚本代码如下:
##############################################
#!/usr/bin/expect
set timeout 30
spawn ssh -l username 192.168.1.1
expect "password:"
send "ispass\r"
interact
##############################################
1. [#!/usr/bin/expect]
这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。
注意:这一行需要在脚本的第一行。
2. [set timeout 30]
基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒
3. [spawn ssh -l username 192.168.1.1]
spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命 令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。
它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
4. [expect "password:"]
这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命 令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒
5. [send "ispass\r"]
这里就是执行交互动作,与手工输入密码的动作等效。
温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。
6. [interact]
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
#!/usr/bin/expect #注意安装的路径,不确定 whereis expect 一下
# Change a login shell to bash
set user [lindex $argv 0]
spawn bash $user
expect "]:"
send "/bin/bash "
expect eof
- scp 无密码传输
- scp无密码传输
- SSH无密码登录,SCP无密码传输
- linux下运用scp来进行传输无需要密码
- SCP免密码传输
- scp免密码传输
- scp免密码传输
- scp 免密码传输
- scp传输无须密码
- scp 无密码登陆
- scp无密码登陆
- 无密码SCP
- linux scp 免密码传输
- SCP不用密码传输文件
- 分享一个linux和linux的文件传输【scp无密码传输】
- scp远程无密码复制
- scp、ssh无密码使用
- rsync 无密码 传输
- 第一卷清晨的帝国第一百四十五章鸣金之后谢恳否?
- 中国Android应用商店汇总
- 空字符串与NULL的区别
- 验证输入是否为空,为空在输入框后提示
- 进制转换的一种思路两种实现方法
- scp 无密码传输
- ASP.Net 去除字符串中的html标记
- 二级菜单
- 读研的那些事儿(五)
- 谈谈iOS下图像颜色检测、颜色匹配的解决方法
- PHP面向对象
- sql语法
- 。。。
- Mysql 数据类型