linux脚本编程telnet
‘壹’ 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写个linux脚本,功能是telnet某台服务器,运行一个命令并把命令结果存到本地。
其实这种交互式的操作首选expect脚本。
Shell的话可以试试下面这样:
#!/bin/ksh
(
telnet16.158.49.140<<!
root
oms
ls
!
)>OUTPUT
‘叁’ 如何实现linux的批处理telnet脚本
把ip地址保存为ip.txt
把cd /tksys/startup/
sed -i '/^ntpsvr=/ s/[^=]*$/'`sed -n '/^default=/ s/[^=]*=//p' network.cfg`'/' network.cfg 保存为2.txt
cat ip.txt |while read line ;do telnet $line user password<2.txt ;done
就这样的思路 俺不懂没测试过
‘肆’ linux 中如何使用shell 脚本执行 telnet
登录并备份到tftp的脚本是这个奶奶样的:
#!/usr/bin/expect
spawn telnet 10.21.10.233
expect "*sername*"
send "admin\r"
expect "*asswor*"
send "******\r"
send "en\r"
expect "*assw*"
send "*******\r"
send " running-config startup-config\r"
expect "*estination filename*"
send "\r"
send " startup-config tftp:\r"
expect "*ddress or name of remote host*"
send "10.21.10.110\r"
expect "*estination filename*"
send [exec date +C2950_BJ95-20%y%m%d].config\r
sleep 10
send "exit\r"
send "\r"
‘伍’ 在linux系统上使用sh脚本 通过脚本telnet到另外一台AIX的服务器上去执行一段命令并将结
大致思路是要用到expect工具,我理解aix上执行的一段命令是要放到后台
#!/bin/bash
/usr/bin/expect<<END
spawntelnetIP#IP是AIX的地址
expect"*login:"
send"user "#user是登录用户
expect"*assword:"
send"pass "#pass是用户登录口令
expect"*#"#我假设是root登录,其shell提示符以#结尾
send"command>/tmp/a.txt& "#command是要后台执行的一段命令,注意有&符号
expect"*#"
send"whiletrue;doflag=$(cat/tmp/a.txt);if["$flag"="1"];thenbreak;fi;sleep300;done "
expect"*#"
send"exit "
expecteof
END
touch/tmp/final
上面是实现此效果的大致代码,没有测试过,可能会有些小问题,大致思路如此,希望对你有帮助。
‘陆’ 怎么在LINUX里开启telnet服务,使它可以远程访问管理服务器
Telnet服务的配置步骤如下:
一、安装telnet软件包(通常要两个)
1、 telnet-client (或 telnet),这个软件包提供的是 telnet 客户端程序;
2、 telnet-server ,这个软件包提供的是 telnet 服务器端程序;
安装之前先检测是否这些软件包已安装,方法如下:
[root@wljs root]#rpm _q telnet或[root@wljs root]#rpm _q telnet-client
[root@wljs root]#rpm _q telnet-server
如果没有检测到软件包,需要进行安装,red hat linux 9默认已安装了telnet软件包,一般只要安装telnet-server软件包。
1、在red hat linux 9的安装盘中获取telnet-server-0.17-25.i386.rpm软件包。
2、安装软件包
[root@wljs root]#rpm _i telnet-server-0.17-25.i386.rpm
二、启动telnet服务
1、开启服务
方法一:使用ntsysv,在出现的窗口之中,将 telnet前面*加上,然后按下 OK 。
方法二:编辑 /etc/xinetd.d/telnet
[root@wljs root]# vi /etc/xinetd.d/telnet
找到 disable = yes 将 yes 改成 no 。
2、激活服务
[root@wljs root]# service xinetd restart
三、测试服务
[root@wljs root]#telnet ip(或者hostname)
如果配置正确,系统提示输入远程机器的用户名和密码
Login:
Password:
注:默认只允许普通用户
四、设置telnet端口
#vi /etc/services
进入编辑模式后查找telnet(vi编辑方式下输入/telnet)
会找到如下内容:
telnet 23/tcp
telnet 23/udp
将23修改成未使用的端口号(如:2000),退出vi,重启telnet服务,telnet默认端口号就被修改了。
五、Telnet服务限制
telnet是明文传送口令和数据的,如果你对其默认的设置不满意,有必要对其服务范围进行限制。假设你的主机的ip是210.45.160.17,就可以按如下方式设置了,^_^!
#vi /etc/xinetd.d/telnet
service telnet
{
disable = no #激活 telnet 服务,no
bind = 210.45.160.17 #your ip
only_from = 210.45.0.0/16 #只允许 210.45.0.0 ~ 210.45.255.255 这个网段进入
only_from = .e.cn #只有教育网才能进入!
no_access = 210.45.160.{115,116} #这两个ip不可登陆
access_times= 8:00-12:00 20:00-23:59 # 每天只有这两个时间段开放服务
......
}
六、Telnet root用户的登入
telnet 不是很安全,默认的情况之下不允许 root 以 telnet 进入 Linux 主机 。若要允许root用户登入,可用下列方法:
[root @wljs /root]# vi /etc/pam.d/login
#auth required pam_securetty.so #将这一行加上注释!
或
[root@wljs root]# mv /etc/securetty /etc/securetty.bak
这样, root 就可以直接进入 Linux 主机了。不过,建议不要这样做。也可以在普通用户进入后,切换到root用户,拥有root的权限。
‘柒’ 用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
‘捌’ Linux如何通过脚本,不停地telnet一个IP,记录telnet成功的时间并输出
Telnet本身对另一台服务器检查时,容易退不出来。使用Nmap比较合适,然后写个如下脚本,变更IP及相应的端口及Sleep的时间就可以达到目标。
如下参考:
#!/bin/bash
#Purpose:checkipport
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
exportPATH
#Checkifuserisroot
if[$(id-u)!="0"];then
echo"Error:Youmustberoottorunthisscript"
exit1
fi
Cur_Dir="$(cd-P"$(dirname"${BASHSOURCE[0]}")"&&pwd)"
Cur_Time="$(date+%Y%m%d%H%M%S)"
Dest_Ip=172.16.3.19
Dest_Port=22
if[!-f/usr/bin/nmap];then
yum-yinstallnmap
else
:
fi
functionCheck_Port(){
Port_State=$(nmap-P0-sS-p${Dest_Port}${Dest_Ip}|awk'/STATE/{getlinev;printv}'|awk'{print$2}')
if[X${Port_State}==X'open'];then
echo"${Dest_Ip}${Dest_Port}isopen">>${Cur_Dir}/status.txt
echo"${Cur_Time}">>${Cur_Dir}/status.txt
else
echo"${Dest_Ip}${Dest_Port}isfailure">>${Cur_Dir}/status.txt
echo"${Cur_Time}">>${Cur_Dir}/status.txt
fi
}
whiletrue;
do
Check_Port
sleep3
done
‘玖’ Linux系统中如何用shell脚步判断是否telnet成功。
1、连接上相应的linux主机,进入到等待输入shell指令的linux命令行状态下。