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

news/2024/7/7 22:29:18

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

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

从网上查到使用expect可以,简单研究了一下,效果不错。

因为我的操作系统没有安装expect,所以直接"yum -y install expect",你可以根据你的操作系统安装expect,或者源码编译。

安装好之后就可以使用了,这里有几种方法:

一、单独写一个脚本

如 auto_scp.sh:

#!/usr/bin/expect

#使用第一个参数

set server_ip [lindex $argv 0]

#后面的也可以用参数[lindex $argv n]

set server_port 22

set server_dir /home/test

set server_user test

set server_pswd test

set scp_file auto_scp.sh

# 设置超时时间

set timeout 60

spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir

expect {

"passphrase"

{

send "$server_pswd\n";

}

"password"

{

send "$server_pswd\n";

}

"yes/no"

{

send "yes\n";

exp_continue;

}

}

expect eof

我这里的变量都是随意设置的,你可以根据你的情况进行选择,保存退出之后,对该文件加上可执行权限,运行

"./auto_scp.sh 2.2.2.2"就可以了,"2.2.2.2"就是传入的第一参数。

"passphrase"和"password"等就是要监测的输入提示的一部分,send "$server_pswd\n"就是要执行的命令。

二、在脚本中使用----我比较喜欢这个

我这里使用的是Here document方法。

......

......

expect <

set timeout 60

spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir

expect {

"passphrase"

{

send "$server_pswd\n";

}

"password"

{

send "$server_pswd\n";

}

"yes/no"

{

send "yes\n";

exp_continue;

}

}

expect eof

!!

......

变量都是我从配置文件中获取的,这里不再赘述了。

三、在脚本中使用

也是在脚本使用,但是不是用的Here document方法,而是使用expect -c 参数书,"-c"选项后面的字符串填充的就是命令。但是要注意本身字符串的转义符。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


http://lihuaxi.xjx100.cn/news/271370.html

相关文章

Elasticsearch 查询数据的工作原理是什么?

点击上方“方志朋”&#xff0c;选择“设为星标”回复”666“获取新整理的面试文章来源&#xff1a;8rr.co/GsAa面试题ES 写入数据的工作原理是什么啊&#xff1f;ES 查询数据的工作原理是什么啊&#xff1f;底层的 Lucene 介绍一下呗&#xff1f;倒排索引了解吗&#xff1f;面…

SLAM中的卡尔曼滤波:究竟滤了谁?

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达在SLAM系统中&#xff0c;后端优化部分有两大流派。一派是基于马尔科夫性假设的滤波器方法&#xff0c;认为当前时刻的状态只与上一时刻的状态有关。另一派是非线性优化方…

C#如何根据DataTable生成泛型List或者动态类型list

背景&#xff1a;在项目中&#xff0c;sql语句检索返回DataTable&#xff0c;然后根据检索结果做进一步的操作&#xff0c;本篇文章即是介绍如何将DataTable快速生成泛型List返回。 假设存在如下学生类&#xff1a; 1 public class student 2 { 3 public int I…

深挖谷歌 DeepMind 和它背后的技术

作者 | James Murphy译者 | 天道酬勤 责编 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;人工智能(AI)的子集已经成倍增长&#xff0c;并完成了只有人类才能完成的各种任务。像机器学习这样的技术可以执行管理任务、人脸识别、下棋&#xff0c;甚至翻译语言…

涵盖18+ SOTA GAN实现,这个图像生成领域的PyTorch库火了

视学算法报道转载自&#xff1a;机器之心作者&#xff1a;杜伟、陈萍GAN 自从被提出后&#xff0c;便迅速受到广泛关注。我们可以将 GAN 分为两类&#xff0c;一类是无条件下的生成&#xff1b;另一类是基于条件信息的生成。近日&#xff0c;来自韩国浦项科技大学的硕士生在 Gi…

Cosmos的基石:IL2CPU编译器--.net/C#开源操作系统学习系列三

本文的代码包以cosmos-12304.zip为例&#xff08;从这个包开始&#xff0c;COSMOS的内核算是有了个基本的雏形&#xff0c;就像是一颗大树在出芽前会先长出庞大的根系&#xff0c;现在就要破土长出第一颗芽了&#xff09; IL2CPU之于COSMOS就相当与GCC之于LINUX&#xff0c;查看…

第二十七天笔记

isinstance 判断一个对象是否是一个类的实例issubclass 判断是否是子类 反射:通过字符串来反射/映射到对象/类的属性上 __str__: 在对象被打印时自动触发,可以用来定义对象被打印时的输出信息 注意:必须返回一个字符串类型的值, __del__: 在对象被删除时先自动触发该方法,可以…

实施和开发哪个前景好_web前端与java后台开发哪个前景、待遇好?

小项目开发速度最重要&#xff0c;所以过程式的JavaScript最流行。大型项目维护性和扩展性重要&#xff0c;所以oop、mv*式的模式合适&#xff0c;所以js上的各式框架也是层出不穷&#xff0c;针对这一现状&#xff0c;目前js标准和各框架都在改变。3D渲染是浏览器给js暴露了We…