`

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"选项后面的字符串填充的就是命令。但是要注意本身字符串的转义符。

更多使用方法,请参看"man手册"。

 

2
5
分享到:
评论

相关推荐

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

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

    14.Shell脚本编程之expect.md

    通过使用 Expect,可以将原本需要手动进行的操作,例如 SSH 登录、FTP 登录等,编写成脚本自动执行。这在需要对多台服务器执行相同操作的场景下尤其有用,能够显著提高系统管理员的工作效率。 ### 2. 安装 Expect ...

    linux编写bash shell脚本文件.sh 自动输入密码.在脚本中使用sudo命令,将密码保存在脚本中,不需要手动输入密码

    总之,在Linux Bash Shell脚本中使用`sudo`命令时,可以通过`expect`工具或修改`sudoers`文件来自动化密码输入。然而,这种方式应当谨慎使用,因为可能会降低系统的安全性。在实际应用中,应根据具体需求和安全策略...

    shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止

    这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...

    Shell脚本实现自动输入密码登录服务器

    Shell脚本实现自动输入密码登录服务器是自动化运维和部署中的常见需求,特别是在执行涉及权限验证的任务时,如scp文件传输或SSH远程连接。在这种情况下,使用expect工具可以帮助我们编写脚本,自动处理需要用户交互...

    用expect 实现切换用户时自动输入密码.txt

    - **执行脚本的方式**:不能像普通的bash脚本那样使用`sh autosu.sh`,因为expect使用的是自己的解释器,而不是bash。正确的执行方式是直接运行脚本,如`./autosu.sh`。 - **路径问题**:确保expect的路径正确。可以...

    用于shell脚本无交互的ssh自动登陆(转载)

    为了解决这一问题,这篇博文介绍了如何使用expect工具实现shell脚本中的SSH无交互自动登录。 expect工具是基于Tcl语言编写的,它能够通过自动化的方式响应程序输出的提示信息。在ssh命令执行时,expect可以用来捕获...

    远程批量修改linux服务器密码的脚本归类.pdf

    5.Shell 脚本的使用:我们使用 Shell 脚本来实现批量修改 Linux 服务器的密码。该脚本可以自动地执行相关的命令,并对服务器进行批量操作。 6. ip 列表的使用:我们使用 ip 列表来存储要处理的服务器的 ip 地址。该...

    centos7 ssh免密登录自动化配置脚本(ps:已测试过)

    shell脚本通常用于执行一系列命令,而expect则是一个交互式脚本语言,它可以模拟用户与程序的交互,非常适合自动处理需要用户输入的情况,比如SSH登录过程中的密码验证。 在"shell+expect编写的 大数据集群ssh免密...

    Shell脚本专家指南

    - **为expect脚本定制参数的shell脚本**:如何编写shell脚本来定制expect脚本的行为。 - **让telnet的expect脚本自动执行**:介绍了一个示例,演示如何自动化telnet会话。 #### 第18章 用户输入超时 - **手动实现...

    11.26 交换机配置,支持远程网口登陆。写shell脚本的测试用例设计.rar

    本文将深入探讨如何配置交换机以支持远程网口登录,并介绍如何编写Shell脚本进行测试用例设计,以此确保网络设备的稳定性和安全性。 首先,交换机配置支持远程网口登录主要是为了实现网络管理员对设备的远程管理和...

    expect 脚本的简单例子

    关于自动化脚本expect的一个例子。本脚本功能是 实现自动输入密码登录到一个server机器上。

    linux编写脚本使用expect正则表达式 教程

    在实际应用中,我们可能会遇到需要在shell脚本中自动输入密码的情况。如描述中提到的,这通常通过`expect`来实现。例如,当你有一个需要密码的脚本时,可以这样做: ```bash #!/bin/bash expect -c " spawn ./...

    shell脚本通过expect实现自动单边无密登录功能

    最近项目需要实现单边无密登录,去网上搜索了下相关文章,实践之后发现几乎都不能用。于是结合expect的使用方法自行写了一个,通过验证可用。现在总结在这供需要的朋友参考。 代码如下: EXPECT=/usr/bin/expect ...

    shell脚本实现ssh自动登录功能分享

    ### Shell脚本实现SSH自动登录功能详解 #### 一、背景与需求 在日常工作中,运维人员或开发人员经常需要远程连接到不同的服务器进行管理和操作。对于Mac用户来说,可能会发现缺少像SecureCRT这样的图形界面工具来...

    5Shell脚本.zip

    Expect是一个用于自动化交互式程序的工具,它可以与Shell脚本结合使用,模拟用户与命令行接口的交互,如在SSH登录、输入密码等场景。`expect`关键字用于创建这样的脚本。 3. **正则表达式**: 正则表达式是用于...

    使用shell脚本在有密码的情况下一次维护多个设备

    使用shell脚本在有密码的情况下一次维护多个设备的解决方案,其中使用了工具有for、if和expect。此代码将expect和shell有机的结合起来,并使用sed进行修改文件。 压缩包涵全部的实验demo。

Global site tag (gtag.js) - Google Analytics