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到主機