`

Linux下用expect实现ssh自动登录并执行脚本

阅读更多

Linux下用expect实现ssh自动登录并执行脚本

 

expect不是系统自带的,需要安装:

        yum install expect

装完后才可执行以下脚本。

 

 ssh密码认证的登陆脚本:

#!/bin/bash

# 匹配提示符
CMD_PROMPT="\](\$|#)"

# 要执行的脚本
script="/root/test.sh"

username="root"
password="123456"
host="192.168.1.109"
port=22

expect -c "
	send_user connecting\ to\ $host...\r    # 空格要转义
	spawn ssh -p $port $username@$host
	expect {
    	    *yes/no* { send -- yes\r;exp_continue;}
   	    *assword* { send -- $password\r;}
	}
	expect -re $CMD_PROMPT
	send -- $script\r
	expect -re $CMD_PROMPT
	exit
"
echo "\r"

 

ssh公钥认证的登陆脚本:

 

#!/bin/bash

# 匹配提示符
CMD_PROMPT="\](\$|#)"

# 要执行的脚本
script="/root/test.sh"

username="root"
password="123456"
host="192.168.1.109"
port=22

expect -c "
	send_user connecting\ to\ $host...\r
	spawn ssh -p $port $username@$host
	expect -re $CMD_PROMPT
	send -- $script\r
	expect -re $CMD_PROMPT
	exit
"
echo "\r"
 

 

 1. send_user 是回显,相当于echo。

 2. spawn 是开启新的进程

 3. expect{  } 这是匹配上一条指令的输出,,比如上面spawn 那句执行完后,会提示你输入密码,提示语中会包含 password,因此就匹配*assword*,然后就send -- $password 把密码发过去。

 4. send 就是发指令到对端

 5. expect 内部有个exp_continue ,意思是重新匹配所在的expect,相当于while的continue

 6. expect 的 -re 表示匹配正则表达式

 

ps:expect 内部的指令的参数中特殊字符需在前面加\转义

 

类似的还可实现ftp登陆,自动上传下载文件等等。

分享到:
评论

相关推荐

    Linux中使用expect脚本实现远程机器自动登录

    本篇文章给大家介绍在Linux中使用expect脚本实现远程机器自动登录,前提是要创建一个expec脚本ssh_expect,接下来定义一些命令别名等,下面跟着脚本之家小编一起学习学习吧

    expect命令在linux下实现批量ssh免密

    有时候我们需要批量发送ssh命令给服务器,但是有可能有些服务器是新加入的,还没有配置ssh免密,这个时候就会提示我们输入yes/no 或者password等,expect脚本命令就是用于在提示这些的时候,自动为我们输入相应的...

    Linux expect实现自动登录脚本实例代码

    expect是一个基于Tcl的用于自动交互操作的工具语言,它适合用来编写需要交互的自动化脚本,比如上面提到的SSH输入...下面这篇文章主要给大家介绍了关于Linux expect实现自动登录脚本的相关资料,需要的朋友可以参考下。

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

    文件名:ssh_auto_login 代码如下:#!/usr/bin/expect### ssh模拟登陆器## @author zhiyuan <hzyhouzhiyuan>##if {$argc<4} { puts “Error params: $argv” puts “Expect params :user passwd ip port ...

    CentOS利用expect批量推送ssh public key的脚本

    CentOS利用expect批量推送ssh public key的脚本

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

    主要介绍了Shell脚本实现自动输入密码登录服务器,本文使用expect来实现这个需求,讲解了expect的安装及使用脚本,需要的朋友可以参考下

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

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

    Python实现ssh批量登录并执行命令

    现在有个任务是在这些电脑上执行某些命令,者说进行某些操作,比如安装某些软件,拷贝某些文件,批量关机等。如果一台一台得手工去操作,费时又费力,如果要进行多个操作就更麻烦啦。 或许你会想到网络同传,网络同...

    用expect实现的自动登录到多台服务器的shell脚本

    /usr/bin/expect -fset ipaddress [lindex $argv 0]set passwd [lindex $argv 1]set timeout 30spawn ssh root@$ipaddress#expect “yes/no”#send “yesr”expect “password:”send “$passwdr”expect “]*”send...

    Linux实现自动登录的实例讲解

    使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。 脚本代码如下: #!/usr/bin/expect set ...

    linux 下python安装及借助Paramiko进行sftp自动登录

    普通的shell脚本要支持ssh自动登录或者 sftp文件自动上传下载,需要lftp、expect等额外的工具辅助。但操作系统有时候未安装lftp和expect,只安装了python。此时,用python加paramiko模块,可以解决ssh、sftp自动登录...

    linux中expect的介绍与使用示例

    expect是一种自动交互语言,能实现在shell脚本中为scp和ssh等自动输入密码自动登录。下面这篇文章主要介绍了linux中使用expect的方法示例,需要的朋友可以参考借鉴,下面来一起学习学习吧。

    shell脚本实现ssh-copy-id批量自动发送公钥到远程主机

    批量实现自动发送公钥到远程主机 环境 firewalld:关闭 selinux:关闭 实现方式 sshpass命令 shell调用expect命令 sshpass命令 #!/bin/bash # #***********************************************************...

    shell结合expect写的批量scp脚本工具

    expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了。 ...

    远程批量修改linux服务器密码的脚本

    需要对服务器进行批量的修改root密码,还要在每台服务器新建一个用户,如果一个一个登到的服务器上进行修改的话,估计一个下午又没有了,首先想到的是我最喜欢的php,其中有个ssh2 模块,不得不承认用php 来处理这样...

    Shell脚本专家指南

    《Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本...

    shell实现批量登录服务器修改用户密码

    虽然现在有ansible、saltstack等批量处理工具,但是在内网环境下,这些工具还需要离线安装,安装好之后还需要学会工具的使用方法,比较麻烦;甚至还有一些比较苛刻的企业,为了服务器安全,连ssh公钥都不让推送。...

Global site tag (gtag.js) - Google Analytics