我的编程空间,编程开发者的网络收藏夹
学习永远不晚

expect实现Linux自动登陆远程机器脚本实例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

expect实现Linux自动登陆远程机器脚本实例

expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等交互过程,写到Shell脚本里以实现一些自动化操作。

在 Linux 下进行远程登陆的时候,总是要进行 ssh 输入账号密码,相对比较繁琐。

而有时候为了保护线上重要的机器不能随便登录,通常使用从本地登陆到公司的中间机器(跳板机)然后才能登陆到线上的机器。如果 A -> B -> C 三台机器,如果想从 A 直接到 C 只能通过 B 进行登录。下面的脚本就是解决这种有多个依赖的关系。

注意事项:

1. 使用实时 bash version >= 4.0,因为配置中需要使用关联数据

2. 如果需要全局使用直接修改 autologin 的名字,移动到 PATH 路径下即可 eg: mv autologin /usrl/local/bin/to(改为自己想要使用的名字)

脚本代码:

#!/usr/local/bin/bash
# @Version 0.3.1
# @filename to
# 修复等不需要要配置跳板机的时候执行命令,在配置跳板机位置默认填 no 即可
# @Author pemakoa@gmail.com
# Bash version >= 4.0 使用关联数组

# Usage: host user passwd port jump_host command 
# 四种情况如下:
# 1. 直接登录目标机器 如 A 
# 2. 需要中间机器登陆到目标机器 如 C, 其中 B 为中间机器,会先登录 B在从 B登陆到 C然后执行 command
# 3. 直接登录目标机器并执行相应的命令 如 D

declare -A _server_config

_server_config['A']="a_host a_user a_passwd a_port"
_server_config['B']="b_host b_user b_passwd b_port"
_server_config['C']="c_host c_user c_passwd c_port B '(command eg) ls .'"
_server_config['D']="d_host d_user d_passwd d_port no 'cd /home && ll'"

_config_keys=(${!_server_config[@]})
_length=${#_server_config[@]}
_login_server=$1
_config_status=false

# 是否输入登陆机器
if [ "$_login_server" == "" ];then
    echo -e "\033[40m\033[31m Please input login server, you can choose one follows list \033[0m"
    for i in "${_config_keys[@]}";do
        echo -e "\033[41;37m $i \033[0m "
    done
    exit
fi

# 检查登陆的机器是否配置
for i in "${_config_keys[@]}";do
    if [ "$_login_server" == "$i" ];then
        _config_status=true
    fi
done

if [ "${_config_status}" == "false" ];then
    echo -ne "\033[40m\033[31m
        Not config server info ...
        Please config in _server_config like
        Host User Passwd Port Jump Command\033[0m"
    exit
fi

# 登陆 如果配置跳板机,先登陆跳板机在登陆到目标机器
_host=$(echo ${_server_config["${_login_server}"]} | awk '{print $1}')
_user=$(echo ${_server_config["${_login_server}"]} | awk '{print $2}')
_passwd=$(echo ${_server_config["${_login_server}"]} | awk '{print $3}')
_port=$(echo ${_server_config["${_login_server}"]} | awk '{print $4}')
_jump=$(echo ${_server_config["${_login_server}"]} | awk '{print $5}')
_command=$(echo ${_server_config["${_login_server}"]} | awk -F"'" '{print $2}')

if [ "${_command}" != "" ]; then
    _command="expect \"*]*\"
    send \"${_command}\r\""
fi

if [ "${_jump}" != "" ] && [ "${_jump}" != "no" ]; then
    _jump_host=$(echo ${_server_config["${_jump}"]} | awk '{print $1}')
    _jump_user=$(echo ${_server_config["${_jump}"]} | awk '{print $2}')
    _jump_passwd=$(echo ${_server_config["${_jump}"]} | awk '{print $3}')
    _jump_port=$(echo ${_server_config["${_jump}"]} | awk '{print $4}')

    expect -c "
    set timeout 30
    spawn ssh -p${_jump_port} ${_jump_user}@${_jump_host}
    expect {
        \"yes/no\" { send \"yes\r\"; exp_continue }
        \"assword\" { send \"${_jump_passwd}\r\" }
    }

    expect \"*]*\" 
    send \"ssh -p${_port} ${_user}@${_host}\r\"
    expect \"assword:\" 
    send \"${_passwd}\r\"
    ${_command}
    interact"
else
    expect -c "
    set timeout 30
    spawn ssh -p${_port} ${_user}@${_host}
    expect {
        \"yes/no\" {send \"yes\r\"; exp_continue }
        \"*assword:\" { send \"$_passwd\r\" }
    }
    ${_command}
    interact
    "
fi

到此这篇关于expect实现Linux自动登陆远程机器脚本实例的文章就介绍到这了,更多相关Linux自动登陆脚本内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

expect实现Linux自动登陆远程机器脚本实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

expect实现Linux自动登陆远程机器脚本实例

expect 是由DonLibes基于Tcl(ToolCommandLanguage)语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等交互过程,写到Shell脚本里以实现一些自动化操作。
2022-12-29

expect如何实现Linux自动登陆远程机器

本文小编为大家详细介绍“expect如何实现Linux自动登陆远程机器”,内容详细,步骤清晰,细节处理妥当,希望这篇“expect如何实现Linux自动登陆远程机器”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。e
2023-07-04

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

首先创建一个expect脚本ssh_expect,文件内容如下:#!/usr/bin/expect -f set hostname [lindex $argv 0] set user [lindex $argv 1] set passwd
2022-06-04

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

expect expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令。当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令。但当不能使用密钥验证的时候,我们就没有办法了。所以,这时候只要知道对方机器
2022-06-04

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

本篇内容介绍了“Linux中怎么使用expect脚本实现远程机器自动登录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先创建一个expec
2023-06-09

如何实现Putty自动登陆远程Linux主机

本篇内容主要讲解“如何实现Putty自动登陆远程Linux主机”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现Putty自动登陆远程Linux主机”吧!首先登陆到 Linux 主机,具体过
2023-06-09

Putty实现自动登陆远程Linux主机的方法

由于工作需要,经常要从 Windows 主机访问远程的 Ubuntu 服务器,每次输入账号和老长的密码,感觉很麻烦,于是参考网上的教程简单的设置了一下就能自动登陆远程主机了,非常的方便。 虽然 Putty 也提供了 puttygen.exe
2022-06-04

Linux中怎么使用expect实现脚本自动交互

这篇文章主要介绍“Linux中怎么使用expect实现脚本自动交互”,在日常操作中,相信很多人在Linux中怎么使用expect实现脚本自动交互问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux中怎么使
2023-06-27

python 实现自动远程登陆scp文件实例代码

python 实现自动远程登陆scp文件实例代码 实现实例代码:#!/usr/bin/expectif {$argc!=3} { send_user "Usage: $argv0 {path1} {path2} {Password}nn"
2022-06-04

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

#!/usr/bin/expect -fset ipaddress [lindex $argv 0]set passwd [lindex $argv 1]set timeout 30spawn ssh root@$ipaddress#exp
2022-06-04

Shell脚本实现非法IP登陆自动报警

服务器的安全稳定是每个运维都希望达到的目标,毕竟网站一旦流量大了,访问高了,就会有一些无聊人来攻击,帮忙检测漏洞是好,但纯ddos的性质就很恶劣了.说远了,这篇文章只是检测有非法ip登录到服务器上就自动给运维报警,当然也可以改成短信报警,前
2022-06-04

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

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

SSH远程登陆Linux主机怎么实现

这篇文章主要讲解了“SSH远程登陆Linux主机怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SSH远程登陆Linux主机怎么实现”吧!什么是SSH?SSH是一种网络协议,用于计算机
2023-06-15

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

这篇文章主要介绍了shell脚本如何通过expect实现自动单边无密登录功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:EXPECT=/usr/bin/expec
2023-06-09

在Linux中如何通过expect工具实现脚本的自动交互

这篇文章给大家介绍在Linux中如何通过expect工具实现脚本的自动交互,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。expect是一个自动化交互套件,是建立在tcl基础上的,能过通过脚本设置自动进行交互通信。1 安
2023-06-28

如何用Shell脚本实现非法IP登陆自动报警

这篇文章主要讲解了“如何用Shell脚本实现非法IP登陆自动报警”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用Shell脚本实现非法IP登陆自动报警”吧!代码如下:#!/bin/bas
2023-06-09

PHP Linux脚本操作实例:实现自动化部署

近年来,随着软件行业的快速发展,部署工作在开发流程中变得愈发重要。为了提高效率,许多开发团队都开始采用自动化部署来简化繁琐的部署过程。在这其中,PHP语言在Linux环境下的脚本操作成为了一种常见的实现方式。本文将介绍如何使用PHP脚本在L
2023-10-21

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

使用Linux的程序员对输入密码这个举动一定不陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得输入密码,比如使用超级用户执行命令,又比如ftp、ssh连接远程主机等等,如下图:那么问题来了,在脚本自动化执行的时候需要输入
2022-06-04

Linux系统设置开机自动运行脚本的方法实例

前言 大家好,我是良许。 在工作中,我们经常有个需求,那就是在系统启动之后,自动启动某个脚本或服务。在 Windows 下,我们有很多方法可以设置开机启动,但在 linux 系统下我们需要如何操作呢? Linux 下同样可以设置开机启动,但
2022-06-04

编程热搜

目录