shelltelnet脚本
‘壹’ 用expect实现telnet登陆到linux系统后,再执行一个shell脚本,待这个shell脚
参考一种类自然语言的脚本语言:
001 var {v_time} value datetime
002 screen.text at point {10} {30} string {2. telnet ipv4 (192.168.186.132:23) test , datetime: ~v_time~}
003
004 telnet.connect ip {192.168.186.132} port {23}
005 telnet.recv expect {Username:}
006 telnet.send {cisco%0a}
007 telnet.recv expect {Password}
008
009 telnet.send {cisco%0a}
010 telnet.recv expect {>}
011 telnet.send {enable%0a}
012 telnet.set onrecv {More} send { }
013 telnet.set delay {200} ms after per byte send
014 telnet.send {show version%0a}
015 telnet.recv for {5} seconds
016
017 telnet.send {show run%0a}
018 telnet.recv for {5} seconds
019 telnet.send {exit%0a}
020 telnet.close
021
022 var {v_time} value datetime
023 screen.text at point {10} {60} string {telnet tested end. datetime:~v_time~}
024
025 run.end
--------------------------------------------------------------------
简单网络管理语言(Simple Network Management Language)是一种类自然语言的脚本语言,它采用snmp、telnet、ping、dns、arp、ssh、tcp、udp、web等协议访问网络设备,内置smtp协议用于告警等邮件的发送,支持excel、mysql、sqlite等3种方式进行网管数据的存取。
最新版本: snml8.13(ladybird20200205) utf8&ipv6
项目托管地址:https://github.com/ladybirdSnml/snmlipv6utf8snmptelnetsshweb
打包下载:https://ladybirdsnml.github.io/snmlipv6utf8snmptelnetsshweb/snml_utf8ipv6.zip
‘贰’ shell脚本telnet登陆交换机备份配置
#!/bin/bash
export datetime='date +%Y%m%d'
export BAKTIME=`date +%Y%m%d%H%M%S`
export user="admin"
export password="admin"
export back="dis cu"
export BAK_DIR=/back/h3c
for i in $(cat ip_file)
do
{
echo $user;
sleep 1;
echo $password;
sleep 1;
echo $back;
sleep 1;
echo " ";
sleep 5;
}|telnet $i > $BAK_DIR/$i-$BAKTIME.log
done
mkdir $BAK_DIR/H3C_$datetime
mv *-$datetime* H3C_$datetime
注释
####################################
export BAKTIME=`date +%Y%m%d%H%M%S` 输出系统时间
export user="admin" 此用户为交换机、路由器用户名
export password="admin" 此密码为交换机、路由器密码
export back="dis cu" 此命令为查看H3C交换机配置
export BAK_DIR=/home/erp/back/h3c 此目录是linux服务器备份交换机、路由器的存放目录
cat ip_file 此命令意思是查看ip_file文件中的内容,逐行查看
####################################
ip_file 文件添加交换机IP(注意:不要加双引号, 文件与脚本在同一目录下存放)
#以下为交换机、路由器IP地址
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.7
‘叁’ 如何在shell脚本中,判断一个基本命令执行是否成功
1.连接到相应的Linux主机,进入Linux命令行状态,等待shell命令的输入。
‘肆’ shell写个linux脚本,功能是telnet某台服务器,运行一个命令并把命令结果存到本地。
其实这种交互式的操作首选expect脚本。
Shell的话可以试试下面这样:
#!/bin/ksh
(
telnet16.158.49.140<<!
root
oms
ls
!
)>OUTPUT
‘伍’ 如何用shell脚本实现自动telnet
很多人认为telnet象passwd和su一样,无法通过管道和输入转向使其自动工作,但实际上telnet是支持输入转向的.虽然,严格的说,shell脚本无法使telnet进入交互状态,但它确实可你使你进入远程系统并运行你希望的命令后退出.这远比用rsh(remsh,rcmd)更令人放心,
使用如下的脚本可以达到你的要求:
(sleep 1;echo user;sleep 1; echo passwd;echo yourcmd ;sleep 1)|telnet remotehost
其中user,passwd,yourcmd,remotehost分别更换成你的用户名,用户口令,你想要运行的命令,远程机器名或IP便可以了. 如果要想使用脚本进入交互状态,可以使用expect.
如果你要通过telnet某个IP的端口来得到部分数据,则可以用以下命令
(sleep 5;) | telnet IP PORT 这样就可以在telnet后将PORT在5秒内输出的数据打印到屏幕上,然后自动退出
EG:
tempValue="KEY"
str4=`(sleep 1;echo AA;sleep 1; echo 123; sleep 1; echo tail -f /aa/log/a.log;sleep 1) | telnet ${IP} | grep ${tempValue}`
num4=`echo ${#str4}`
if [ ${num4} -eq 0 ];then
echo "==::在a.log文件中没有找到关键字KEY,请检查!"
sheet4="@NULL"
else
echo "==::在a.log文件有找到关键字KEY!"
sheet4="@OK"
fi
‘陆’ Linux系统中如何用shell脚步判断是否telnet成功。
1、连接上相应的linux主机,进入到等待输入shell指令的linux命令行状态下。
‘柒’ java在linux中执行shell脚本,用telnet检测指定IP的端口是否可以连接上
你可以增加两个进程,一个用来监视telnet的输出,另外一个用来监视是不是有错。你分析那个telnet的输出就好了。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ExcuteThread extends Thread {
private String name;
public ExcuteThread(String name) {
this.name = name;
}
@Override
public void run() {
try {
Process p = Runtime.getRuntime().exec(name);
InputStream fis = p.getInputStream();
final BufferedReader brError = new BufferedReader(
new InputStreamReader(p.getErrorStream(), "gb2312"));
InputStreamReader isr = new InputStreamReader(fis, "gb2312");
final BufferedReader br = new BufferedReader(isr);
Thread t1 = new Thread() {
public void run() {
String line = null;
try {
while ((line = brError.readLine()) != null) {
// System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (brError != null)
brError.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
public void run() {
String line = null;
try {
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
t1.start();
t2.start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
}
}
}
‘捌’ Linux,在shell脚本中实现用ssh或者telnet方式登录另一个linux主机,然后修改第二个linux上的一个文件。
#!/usr/bin/expect-f
settimeout30
setipaddr"192.168.0.100"#IP地址
setusername"root"#用户名
setpassword"password"#密码
spawnssh$username@$ipaddr
expect{
"yes/no"{send"yes ";exp_continue}
"password:"{send"$password "}
}
expect"]#"#用户的提示符,根据需要修改一下
send"ls "#执行的命令,换成自己修改文件的
send"exit "
expecteof
exit
‘玖’ 如何通过shell脚本登录telnet 并将执行结果输出到文件
#!/bin/bash
USERNAME=localhost #用户名
PASSWORD=123456 #密码
HOST_IP=192.168.1.** #要登录的主机IP
(
sleep 1
echo ${USERNAME} #登录时输入用户名
sleep 1
echo ${PASSWORD} #登录时输入密码
sleep 3
echo "ping 192.168.2.10" ######### 如何将这条命令结果输出到文件保存呢???
sleep 3
) | telnet ${USERNAME} ${HOST_IP} #telnet到主机