linux脚本实现自己主动输入password
使用Linux的程序猿对输入password这个举动一定不陌生,在Linux下对用户有严格的权限限制,干非常多事情越过了权限就得输入password。比方使用超级用户运行命令,又比方ftp、ssh连接远程主机等等,例如以下图

那么问题来了。在脚本自己主动化运行的时候须要输入password怎么办?比方你的脚本里有一条scp语句。总不能在脚本运行到这一句时手动输入password吧
针对于ssh或scp命令。可能有人会回答是建立信任关系,关于建立ssh信任关系的方法请自行百度Google。仅仅须要两行简单的命令就可以搞定,但这并非常规的解决方式,假设是ftp连接就没辙了,况且。你不可能为了运行某些命令去给每一个你要连接的主机都手动建立ssh信任。这已经偏离了今天主题的本意。今天要说的是在脚本里自己主动输入password,我们能够想象下,更优雅的方式应该是在脚本里自己配置password。当屏幕交互须要输入时自己主动输入进去,要达到这种效果就须要用到expect
安装
CentOS下安装命令非常easy,例如以下
sudo yum install expect
至于Mac用户,能够通过homebrew安装(须要先安装homebrew。请自行Google)
brew install expect
測试脚本
我们写一个简单的脚本实现scp复制文件,在脚本里配置password。保存为scp.exp例如以下
#!/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设置成你自己的password,然后运行例如以下命令
./scp.exp ./local_file user@host:/xx/yy/
运行前确保scp.exp有运行权限,第一个參数为你本地文件。第二个为远程主机的文件夹,运行脚本假设报错“connect is timeout”,能够把超时设长一点。第二行set timeout 20能够设置超时时间。单位是秒。脚本运行效果例如以下

还能做什么
细心的同学一定发现了,事实上expect提供的是和终端的一种交互机制,输入password仅仅是当中一种应用形式,仅仅要是在终端堵塞须要输入时,都能够通过expect脚本完毕自己主动输入,比方前面脚本里配置了两种交互场景。一种是终端提示"password:"时输入password。另一种是提示"yes/no)?
"时输入“yes”,假设和远程主机是第一次建立连接。运行scp.exp脚本效果是这种

所以我们能够依据终端的提示来配置输入命令。这样就能达到了自己主动化的效果。至于处理其他交互场景,仅仅须要照着上面的脚本依葫芦画瓢即可了
linux脚本实现自己主动输入password的更多相关文章
- linux脚本:shell, 判断输入参数的个数(命令行)
if [ $# != 3 ] ; thenecho "USAGE: $0 from to"echo " e.g.: $0 ~/oucaijun/from ~/oucaij ...
- Linux下无需输入password自己主动登陆sshserver方法
用OpenSSH在linux下登陆sshserver时.每次都提示要输入password,并且使用vim 的netrw插件编辑远程文件时每次改动后保存都要输password,很麻烦. 查看了netrw ...
- centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课
centos shell编程4[分发系统] 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要 ...
- linux脚本监控应用且通过邮件报警异常
一.背景 最近接到监控应用并通过邮件报警的任务,由于需求比较简单,故没有使用springboot那套,而是采用linux脚本的方式进行监控. 二.思路 通过linux自带的定时功能,定时执行一个lin ...
- linux脚本编程(shell)浅介 (转载)
linux脚本(shell)编程 啊,昨天上网看到一篇讲 linux/unix shell 的文章,想想自己最后写这东西也是一年前的事了,想想都快忘光了. 还是整理一下,做一次回顾,以后说不定还用得上 ...
- linux 脚本编写基础(一)
1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...
- Ubuntu输入password登陆后又跳回到登录界面
现象:在Ubuntu登陆界面输入password之后.黑屏一闪而且出现了check battery state之类的文字之后,又跳转到登录界面. 原因:主文件夹下的.Xauthority文件拥有者变成 ...
- Linux脚本入门(1)
1. Linux 脚本编写基础1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例 ...
- SSH Secure :Algorithm negotiation failed,反复提示输入password对话框
在嵌入式开发中,SSH Secure File Transfer Client 软件使用,方便了windows和linux之间文件拷贝,尤其是多台主机状况下. 最近装了Ubuntu 16.0.4,在V ...
随机推荐
- CSS Modules使用方法
css modules调研 css模块化解决方案 抛弃css (Radium,jsxstyle,react-style) 利用js来管理样式依赖(css Modules) css模块化面临的问题 全局 ...
- GridView 动态绑定控件 OnRowCommand事件触发
主题:GridView动态生成的控件不能触发OnRowCommand事件,且点击控件按钮后,控件的值会消失. 案例, 由于公司需要绑定的数据列顺序是动态生成的,且有的数据列需要绑定Button控件.所 ...
- LeetCode OJ--Copy List with Random Pointer **
https://oj.leetcode.com/problems/copy-list-with-random-pointer/ 灵活的指针链表应用. 每个节点有两个指针next,random,对本链表 ...
- Jquery 返回json数据在IE浏览器中提示下载的问题
Jquery 返回json数据,IE浏览器提示下载的问题,当提交完数据后返回的本来是json数据的,在火弧里测试正常,解决方法如下 今天遇到Jquery 返回json数据,IE浏览器提示下载的问题,当 ...
- (21)python lambda表达式
lambda表达式是一个匿名函数 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用 最简单的例子 add = lambda x,y : x + y print add(3,5) #out ...
- BZOJ 3083 遥远的国度 (换根讨论 + 树链剖分)
题目链接 BZOJ3083 换根不能真正地换. 令当前的根为$cnt$,要查找的子树根为$x$ $1$.$x = cnt$,那么要查找的区域就是整棵树. $2$.$x$在以$cnt$为根的子树内,那 ...
- Topcoder SRM 145 DIV 1
Bonuses 模拟 题意:给你一个序列,按照百分比排序,再将百分比取整,再把剩余百分比加到最大的那几个. 题解:按照题意模拟就好.
- 聊聊、Zookeeper 客户端 Curator
[Curator] 和 ZkClient 一样,Curator 也是开源客户端,Curator 是 Netflix 公司开源的一套框架. <dependency> <groupI ...
- 立体3D方式 【转】
目前为止,至少有四种普遍使用的立体3D传输格式,分别称为frame sequential(帧连续),frame packing(帧封装),side-by-side(并排),以及checkerboard ...
- Win10蓝屏代码
UNEXPECTED_STORE_EXCEPTION “意外存储异常”是Windows 10上的“停止错误”,表示存储组件发生意外异常. 原因 固态硬盘驱动与当前固态硬盘驱动程序不兼容或是当前固态硬盘 ...