题
我试着写脚本,让我登录控制台服务器48港口,所以,我可以很快确定哪些设备,连接各串行总线。
基本上我希望能够有一个脚本,给定名单的主机/口,telnets的第一个列表中的设备和我在交互式方式,这样我可以登录和确认的设备,然后当我靠近telnet届会议上,接到下一届会议在清单。
这问题我面对的是如果我开始远程登录会议内一个可执行的庆典脚本,该届会议立即终止,而不是等待投入。
例如,给予下列代码:
$ cat ./telnetTest.sh
#!/bin/bash
while read line
do
telnet $line
done
$
当我运行命令'echo"hostname"|testscript.sh'我收到以下产出:
$ echo "testhost" | ./telnetTest.sh
Trying 192.168.1.1...
Connected to testhost (192.168.1.1).
Escape character is '^]'.
Connection closed by foreign host.
$
任何人都不会知道的一个办法阻止telnet届会议正在关闭自动?
解决方案
你需要重新定向终端输入到 telnet
过程。这应该是 /dev/tty
.所以你脚本看起来会像:
#!/bin/bash
for HOST in `cat`
do
echo Connecting to $HOST...
telnet $HOST </dev/tty
done
其他提示
我认为你应该看看 希望 程序。它存在于所有现代化的linux发行版.这里是一些实例。
#!/usr/bin/expect -f
spawn telnet $host_name
expect {
"T0>" {}
-re "Connection refused|No route to host|Invalid argument|lookup failure"
{send_user "\r******* connection error, bye.\n";exit}
default {send_user "\r******* connection error (telnet timeout),
bye.\n";exit}
}
send "command\n"
expect -timeout 1 "something"
产卵 命令启动远程登录的程序(telnet,ssh,netcat等)
到 命令使用。嗯..期望的东西从远程会议
发送 -发送命令
send_user -打印意见stdout
谢谢戴夫-这是TTY向我失踪了。
完整的解决方案我用,对于那些有兴趣:
#!/bin/bash
TTY=`tty` # Find out what tty we have been invoked from.
for i in `cat hostnames.csv` # List of hosts/ports
do
# Separate port/host into separate variables
host=`echo $i | awk -F, '{ print $1 }'`
port=`echo $i | awk -F, '{ print $2 }'`
telnet $host $port < $TTY # Connect to the current device
done
远程连接到服务器使用Shell Script例如:
Test3.sh
文件:
#!/bin/sh
#SSG_details is file from which script will read ip adress and uname/password
#to telnet.
SSG_detail=/opt/Telnet/SSG_detail.txt
cat $SSG_detail | while read ssg_det ; do
ssg_ip=`echo $ssg_det|awk '{print $1}'`
ssg_user=`echo $ssg_det|awk '{print $2}'`
ssg_pwd=`echo $ssg_det|awk '{print $3}'`
echo " IP to telnet:" $ssg_ip
echo " ssg_user:" $ssg_user
echo " ssg_pwd:" $ssg_pwd
sh /opt/Telnet/Call_Telenet.sh $ssg_ip $ssg_user $ssg_pwd
done
exit 0
的 Call_Telenet.sh
剧本如下:
#!/bin/sh
DELAY=1
COMM1='config t' #/* 1st commands to be run*/
COMM2='show run'
COMM3=''
COMM4=''
COMM5='exit'
COMM6='wr'
COMM7='ssg service-cache refresh all'
COMM8='exit' #/* 8th command to be run */
telnet $1 >> $logfile 2>> $logfile |&
sleep $DELAY
echo -p $2 >> $logfile 2>> $logfile
sleep $DELAY
echo -p $3 >> $logfile 2>> $logfile
sleep $DELAY
echo -p $4 >> $logfile 2>> $logfile
sleep $DELAY
echo -p $5 >> $logfile 2>> $logfile
sleep $DELAY
sleep $DELAY
sleep $DELAY
sleep $DELAY
echo -p $COMM7 >> $logfile 2>> $logfile
sleep $DELAY
echo -p $COMM8 >> $logfile 2>> $logfile
sleep $DELAY
exit 0
运行上述文件如下:
$> ./test3.sh
也许你可以试试砸-我要力量的会议中的互动模式。
问题在您的例子是,你的链接,输入你的脚本(和间接的 telnet
)输出 echo
.所以之后 echo
是和 telnet
开始时,没有更多的输入读。一个简单的解决可以被替换 echo "testhost"
通过 { echo "testhost"; cat; }
.
编辑: telnet
似乎不像服输入从一个管道。但是, netcat
不可能是合适在这种情况。
@穆 我有一个设置与ssh,没有telnet,所以我不能测试,如果你的问题是录相关,但是运行以下脚本日志我依次向不同的机要求一个密码。
for i in adele betty
do
ssh all@$i
done
如果环境是基于X11,一个可能性是打开一个判断运行的远程登录:
xterm -e telnet $host $port
操作在判断是交互式的和脚本是暂停判断,直到终止。
试试这些链接。
http://planetozh.com/blog/2004/02/telnet-script/
http://www.unix.com/unix-dummies-questions-answers/193-telnet-script.html
#!/bin/sh
( echo open hostname
sleep 5
echo username
sleep 1
echo password
sleep 1
echo some more output, etc. ) | telnet
他们为我工作:D