scp“免密” 远程copy较多文件
2017-05-03 15:11
127 查看
一、linux脚本实现自动输入密码
使用Linux的程序员对输入密码这个举动一定不陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得输入密码,比如使用超级用户执行命令,又比如ftp、ssh连接远程主机等等,如下图
那么问题来了,在脚本自动化执行的时候需要输入密码怎么办?比如你的脚本里有一条scp语句,总不能在脚本执行到这一句时手动输入密码吧
针对于ssh或scp命令,可能有人会回答是建立信任关系,关于建立ssh信任关系的方法请自行百度Google,只需要两行简单的命令即可搞定,但这并不是常规的解决方案,如果是ftp连接就没辙了,况且,你不可能为了执行某些命令去给每个你要连接的主机都手动建立ssh信任,这已经偏离了今天主题的本意,今天要说的是在脚本里自动输入密码,我们可以想象下,更优雅的方式应该是在脚本里自己配置密码,当屏幕交互需要输入时自动输入进去,要达到这样的效果就需要用到expect.
1.安装 expect
sudo apt-get install expect
2.测试脚本myscp
注意,第一行很重要,通常我们的脚本里第一行是
执行前确保scp.exp有执行权限,第一个参数为你本地文件,第二个为远程主机的目录,运行脚本如果报错“connect is timeout”,可以把超时设长一点,第二行
二、远程Copy较多文件脚本version.sh
该shell脚本中用的“myscp”就是第一部分可以实现自动输入密码的脚本,由于放置于/usr/bin/下,所以此处可直接当命令使用,
chmod 777 version.sh
./version..sh 执行该脚本,由此完成了远程Copy较多文件免密的脚本Test.一句话搞定!
使用Linux的程序员对输入密码这个举动一定不陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得输入密码,比如使用超级用户执行命令,又比如ftp、ssh连接远程主机等等,如下图
那么问题来了,在脚本自动化执行的时候需要输入密码怎么办?比如你的脚本里有一条scp语句,总不能在脚本执行到这一句时手动输入密码吧
针对于ssh或scp命令,可能有人会回答是建立信任关系,关于建立ssh信任关系的方法请自行百度Google,只需要两行简单的命令即可搞定,但这并不是常规的解决方案,如果是ftp连接就没辙了,况且,你不可能为了执行某些命令去给每个你要连接的主机都手动建立ssh信任,这已经偏离了今天主题的本意,今天要说的是在脚本里自动输入密码,我们可以想象下,更优雅的方式应该是在脚本里自己配置密码,当屏幕交互需要输入时自动输入进去,要达到这样的效果就需要用到expect.
1.安装 expect
sudo apt-get install expect
2.测试脚本myscp
#!/usr/bin/expect set timeout 20 if { [llength $argv] < 2} { puts "Usage:" puts "$argv0 local_file remote_path" exit 1 } set local_file [lindex $argv 0] set remote_path [lindex $argv 1] set passwd your_passwd set passwderror 0 spawn scp $local_file $remote_path expect { "*assword:*" { if { $passwderror == 1 } { puts "passwd is error" exit 2 } set timeout 1000 set passwderror 1 send "$passwd\r" exp_continue } "*es/no)?*" { send "yes\r" exp_continue } timeout { puts "connect is timeout" exit 3 } } |
#!/bin/bash,而这里是你机器上expect程序的路径,说明这段脚本是由expect来解释执行的,而不是由bash解释执行,所以代码的语法和shell脚本也是不一样的,其中
set passwd your_passwd设置成你自己的密码,然后执行如下命令
./scp.exp ./local_file user@host:/xx/yy/ |
set timeout 20可以设置超时时间,单位是秒。脚本执行效果如下
二、远程Copy较多文件脚本version.sh
#!/bin/sh cd /home/yunduo/Work/LittleCola_Version #日期变量tmp tmp=$(date +%Y.%-m.%-d) #echo $tmp #生成日期文件夹 mkdir -p $tmp cd $tmp #开始远程copy myscp是一个免密码输入的expect脚本 放在/usr/bin下 myscp username@ip:~/work/littlecola/LINUX/android/out/target/product/lentk6753_65u_l1/boot.img . myscp username@ip:~/work/littlecola/LINUX/android/out/target/product/lentk6753_65u_l1/cache.img . myscp username@ip:~/work/littlecola/LINUX/android/out/target/product/lentk6753_65u_l1/lk.bin . myscp username@ip:~/work/littlecola/LINUX/android/out/target/product/lentk6753_65u_l1/logo.bin . |
chmod 777 version.sh
./version..sh 执行该脚本,由此完成了远程Copy较多文件免密的脚本Test.一句话搞定!
相关文章推荐
- LINUX下的ssh登录之后的文件远程copy:scp命令(接前文ssh登录)
- scp从远程同时copy多个文件到本地.md
- 采用scp命令在Linux系统之间copy文件
- 采用scp命令在Linux系统之间copy文件
- 利用scp自动输入密码进行文件远程拷贝或备份
- Linux SSH远程文件/目录传输命令scp
- Linux SSH远程文件/目录传输命令scp
- 在Linux下远程使用scp拷贝文件
- Linux SSH远程文件/目录传输命令scp
- scp远程上传文件
- linux远程传文件scp和sftp详解
- Linux SSH远程文件/目录传输命令scp
- scp:不同的Linux之间copy文件
- 采用scp命令在Linux系统之间copy文件
- Scp命令在Linux系统之间Copy文件的方法
- Linux SSH远程文件/目录传输命令scp
- 采用scp命令在Linux系统之间copy文件
- 采用scp命令在Linux系统之间copy文件
- scp 安全复制(远程文件复制工具)
- Linux SSH远程文件目录传输命令scp