functionmake_tmp_file()
{
local name=${1:-"rand"}
local magic=`date+%s`
echo"/tmp/__${magic}__${name}"
}
functionmake_rand_file()
{
make_tmp_file"$*"
}
# int exec_script(host, port, user, passwd, script, [timeout = 86400])
# 0, succ
# 1, fail
# 2, invalid params
# 3, fail
# 4, invalid script
# 5, login fail
# 6, put file fail
# 7, timeout
# 8, remote execute script fail
functionexec_script()
{
if[$# -lt 5 ]; then
return2
fi
local host=$1
local port=$2
local user=$3
local passwd=$4
local script=$5
local timeout=$((${6:-86400}))# default 1 day
local rscp=$(make_rand_file`basename$script`)
local ret=0
if[!-f$script];then
return4
fi
echo"script = ${script}, remote_script = ${rscp}"
ssh_put$host$port$user$passwd$script$rscp
expect-c"
set timeout$timeout
set flag0
spawn ssh$user@$host;
expect{
\"*assword*\"{send$passwd\r;}
\"yes\/no)?\"{
set flag1;
send yes\r;
}
\"Welcome\"{}
}
if{\$flag==1}{
expect{
\"*assword\"{
send$passwd\r;
}
}
}
expect{
\"*assword*\"{
puts\"INVALID PASSWD,host=$host,user=$user,passwd=$passwd\";
exit1
}
\"#\ \" {} \"$\ \" {} \">\ \" {}
}
send$rscp\r;
expect{
\"#\ \" {} \"$\ \" {} \">\ \" {}
}
send\"rm-f$rscp\r\"
send exit\r;
expecteof{
exit0
}
"
ret=$?
if[$ret-ne0];then
return5
fi
return0
}
# int exec_cmd(host, port, user, passwd, cmd, [timeout = 86400], [rfile = /dev/null])
# 0, succ
# 1, fail
# 2, invalid params
# 3, fail
# 4, invalid script
# 5, login fail
# 6, put file fail
# 7, timeout
# 8, remote execute script fail
functionexec_cmd()
{
if[$# -lt 5 ]; then
return4
fi
local host=$1
local port=$2
local user=$3
local passwd=$4
local cmd=$5
local timeout=$((${6:-86400}))# default 1 day
local rfile=${7-"/dev/null"}
#local log=$(make_tmp_file "${__GEAR_SH}_exec_cmd")
local ret=0
expect-c"
set timeout$timeout
set flag0
spawn ssh$user@$host;
expect{
\"*assword*\"{send$passwd\r;}
\"yes\/no)?\"{
set flag1;
send yes\r;
}
\"Welcome\"{}
}
if{\$flag==1}{
expect{
\"*assword\"{
send$passwd\r;
}
}
}
expect{
\"*assword*\"{
puts\"INVALID PASSWD,host=$host,user=$user,passwd=$passwd\";
exit1
}
\"#\ \" {} \"$\ \" {} \">\ \" {}
}
log_file${rfile}
send\"$cmd\r\";
expect{
\"#\ \" {} \"$\ \" {} \">\ \" {}
}
send exit\r;
expecteof{
exit0
}
"
cat${rfile}|sed-n'1,/[#$>].*exit/p'|sed'1d;$d'>${rfile}
#if [ -f ${log} ]; then rm ${log}; fi
ret=$?
if[$ret-ne0];then
return5
fi
return0
}
相关推荐
这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...
我们使用 SSH 来连接远程 Linux 服务器,并执行相关的命令。 3. Linux 服务器密码的修改:我们使用 Expect 脚本来修改 Linux 服务器的密码。该脚本可以自动地输入密码,并执行相关的命令。 4. 用户和组的管理:在 ...
通过使用 Expect,可以将原本需要手动进行的操作,例如 SSH 登录、FTP 登录等,编写成脚本自动执行。这在需要对多台服务器执行相同操作的场景下尤其有用,能够显著提高系统管理员的工作效率。 ### 2. 安装 Expect ...
### 详解Linux使用Shell+Expect远程登录主机 在Linux环境下,使用Shell脚本结合Expect工具进行远程登录是一种高效且灵活的方式。本文将详细介绍如何利用这两种工具实现自动化远程登录,并提供具体的实现步骤及注意...
在Linux环境下,系统管理员和开发人员经常会遇到需要自动化执行的任务,尤其是那些涉及到远程登录、文件传输等交互式操作的场景。传统的Shell脚本虽然能够很好地处理非交互式的任务,但在面对需要与用户进行交互的...
首先,“源码”标签意味着文章可能包含了具体的代码示例,可能是Python、Shell脚本或者其他编程语言,用于演示如何实现远程执行Linux命令。通常,我们可以使用SSH(Secure Shell)协议来实现这一点,例如Python中的...
在Linux系统管理中,有时我们需要自动化执行远程服务器上的任务,比如执行命令或脚本,而`expect`命令正为此目的而设计。`expect`是一个TCL语言的扩展,用于自动处理交互式应用程序,如SSH、telnet等。通过使用`...
总的来说,这些资源为你提供了在Java环境中调用Shell脚本所需要的基础工具和示例,涵盖了SSH连接、命令执行和交互式脚本控制。通过学习和使用这些库,你将能够构建强大的系统管理工具和自动化解决方案。
Shell脚本是Linux/Unix系统中的一种自动化工具,用于执行一系列命令。在交换机配置的场景中,测试用例设计的主要目标是确保脚本的正确性和可靠性。设计测试用例时,应考虑以下几个方面: 1. **功能测试**:验证脚本...
`SHELL`标签表明`Expect`脚本可以和shell脚本结合使用,进一步提升命令行操作的自动化水平。`SFTP`标签则表示`Expect`可以用来处理SFTP会话,实现文件的安全上传和下载,这对于系统维护和备份工作非常实用。 在实际...
SSH(Secure Shell)是Linux环境下用于远程登录的一种安全协议,它允许用户通过加密的方式连接到另一台计算机,进行命令执行、文件传输等操作。当需要自动化这些过程时,`expect`工具就显得尤为重要。`expect`基于...
本书不仅提供了实用的脚本和技巧,还深入探讨了Shell脚本编程的核心概念和技术。下面是对书中各章节涉及的关键知识点的总结。 ### 第一部分 基本脚本编程技术 #### 第1章 shell脚本的错误检测 - **shell跟踪选项**...
在进行Linux系统管理或自动化任务部署时,经常需要使用SSH(Secure Shell)协议远程连接到其他服务器上执行命令或管理操作。出于安全考虑,SSH在连接远程主机时会要求输入密码,但在脚本自动化场景中,这种交互式...
在Linux环境中,模拟键盘输入是一项常用技能,特别是在自动化脚本、远程操作等场景中。本文将详细介绍如何通过不同的工具和技术来实现这一功能。 #### 使用Expect进行模拟键盘输入 **Expect**是一款强大的自动化...
总之,Shell脚本和Expect工具的结合使用,使得我们可以构建出高效、可靠的远程服务器管理方案,这对于大型分布式系统的运维至关重要。通过对这两个工具的学习和实践,IT专业人员能够提升自己的自动化技能,进一步...
在这篇文章中,我们将详细介绍如何在Linux中使用expect脚本来实现远程机器的自动登录。 首先,我们需要创建一个名为`ssh_expect`的expect脚本。这个脚本的主要任务是接收三个参数:远程主机名(hostname)、用户名...
Shell脚本实现自动输入密码登录服务器是自动化运维和部署中的常见需求,特别是在执行涉及权限验证的任务时,如scp文件传输或SSH远程连接。在这种情况下,使用expect工具可以帮助我们编写脚本,自动处理需要用户交互...