1、如何在 telnet 上Linux主机后执行命令1如何在 telnet 上Linux主机后远程执行主机上的shell脚本从 Windows telnet 到 Linux,建立 主机 与 设备 的通信,这是典型的嵌入式测试环境。我的问题代表了一类人的需求。url这个4楼的帖子具有相当的参考价值。又是一种方法。稍作修改和封装,如下:code;Using native socket connection to simulates a TELNET connection to communicate with Linux machine for sending commands and receivi
2、ng info from it$port = 23$user = root$passwd = xxxxxxTCPStartup()$socket = TCPConnect($host, $port)If $socket = -1 Then MsgBox(48, Error, Connection fail!) ExitEndIfSleep(300)$ack = TCPRecv($socket, 150)If StringInStr($ack, login) 0 Then TCPSend($socket, $user & CRLF) Sleep(500) TCPSend($socket, $pa
3、sswd & CRLF)Else MsgBox(48, Error, Cannot connect) ExitEndIfwait_cmd_prompt($socket)TCPSend($socket, $cmd1 & CRLF)wait_cmd_prompt($socket)TCPSend($socket, $cmd2 & CRLF)wait_cmd_prompt($socket)TCPCloseSocket($socket)TCPShutdown();=; Function Definition;=;Wait for desired command prompt character # be
4、fore sending.Func wait_cmd_prompt($sk) Local $ack Do $ack = StringStripWS(TCPRecv($sk, 300), 2) Sleep(300) ;MsgBox(0,$ack) Until StringRight($ack, 1) = # ;MsgBox(0,out of loop)EndFunc/code不过,我一楼发的问题还没得到解决。运行设备端(Linux环境)的脚本(shell脚本)远比远程命令控制来得可靠,因为这样Linux的一些环境变量是可继承的。继续研究中。minterz发表于 2011-2-22 19:51li
5、nxu下的bash脚本如果要远程启动可以使用plink 使用ssh远程控制xiehuahere发表于 2011-2-23 12:11谢谢楼上的,我试试。另外,这样也行:TCPSend($socket, /home/script.sh & $param & CRLF)Posted14 October 2008 - 09:19 PMWhy not using native socket connections like following example.I am using this algorithm to communicate with my router (Linux machine)
6、for sending commands and receiving info from it.Be sure to replace specific information.;BEGIN SCRIPT-;simulates a TELNET connectionGlobal $host, $port, $delay, $user, $pass, $sk, $ack$host = 192.168.1.1$port = 23; miliseconds to wait before sending/receiving something$delay = 300 ; compensates netw
7、ork/internet delays$user = $pass = TCPStartup()$sk = TCPConnect($host, $port);if invalid socketIf $sk = -1 ThenMsgBox(0, , Cannot connect)ExitEndIf; message from deviceSleep($delay)$ack = TCPRecv($sk, 150)TrayTip(, $ack, 10); verifying the correct answerIf StringInStr($ack, wl500gp login) = 1 Then;
8、if the string is correct then we send userSleep($delay)TCPSend($sk, $user & CRLF)Sleep($delay)$ack = TCPRecv($sk, 80)TrayTip(, $ack, 10); and passwordSleep($delay)TCPSend($sk, $pass & CRLF)Sleep($delay)$ack = TCPRecv($sk, 80)TrayTip(, $ack, 10)ElseMsgBox(0, , Cannot connect)ExitEndIf; verifying the
9、answer of the device (the prompt that it returns after receiving user and password)If StringInStr($ack, root$) = 0 Then ; attention, this string is specificMsgBox(0, Error, Access denied)ExitEndIf; now you can send some commandsSleep($delay)TCPSend($sk, ps & CRLF)Sleep($delay)$ack = TCPRecv($sk, 200
10、0)MsgBox(0,Running processes, $ack)TCPCloseSocket($sk)TCPShutdown()Exit;END SCRIPT-2 Shell脚本自动telnet到远程Linux主机执行操作分类:Shell,程序脚本 作者:KingGoo.Com 发表于2011/03/16没有评论这几天忙,有空的时候还在做OpenLdap单点认证服务。也没时间去研究其他的东东,哦当然还有破解掉Crowd2.0.1(嗯,没错是网上找的方法及 Keymaker)。忙的我一点也不充实今天一群里好友问自动telnet到远程主机进行服务器操作等,当时给他提的建议是做个ssh公钥,然
11、后本地Shell脚本循环远程操作就可以了,没暂时没被他采纳系统是UNIX的故此有了下面这个东东给自己做个记录!(Window利用vbs脚本远程telnet执行远程主机程序)执行格式是这样的里面的sleep是为了下一步程序运行完全而做的延迟。后面的while死循环是为了让以前的全部command执行完毕(sleep 1;echo name; sleep 1 ; echo passwd; sleep 1; echo command;sleep 5 ;while true ;do sleep 1;done; ) |telnet IP#name=可以telnet到远程主机的用户#passwd=当前可以
12、telnet到远程主机的用户的密码#command=远程需要执行的命令#IP=远程主机IP地址#Shell脚本:#!/bin/bash(sleep 1;echo 用户名; sleep 1 ; echo 密码; sleep 1; echo 命令;sleep 1;sleep 5 ;while true ;do sleep 1;done; ) |telnet 192.168.10.235还可以使用linux exec:善待他人就是善待自己!都要从朦胧到澄清!需要互相帮助!也希望日本这场灾难早日过去。(我们是愤青,我们更好我自己的祖国!但我们不是畜牲对吧!)3 Windows远程telnet到Linu
13、x,需分三步走:首先,开启Linux中的network、telnet、xinetd服务。以root用户登陆Linux,使用ntsysv命令调出服务管理工具,确认其中的network、telnet、xinetd服务已启动,必要时可关闭iptables服务。其次,新建一个用户。同样以root用户登陆Linux,使用useradd和passwd命令新建一个非root的普通用户。在此列下小编新建用户时的代码:useradd sun(回车)passwd sun(回车)123(回车)123(回车)这样,就创建了一个密码为123的sun用户。最后,使用SSH远程访问Linux。运行SSH,在弹出的连接设置对
14、话框内,将Linux的IP地址、Linux用户名输入到Host Name、User Name,确认后,输入用户密码,再确认。注意,此处输入的Linux的IP地址可通过ifconfig命令查看,Linux用户名可以是sun或其他新建普通用户,但不可以是root用户。因为Linux在TELNET下是不允许直接用ROOT登陆的! 但登陆后可以用su命令转到root下。4 利用vbs脚本远程telnet执行远程主机程序分类:Vbs 作者:KingGoo.Com 发表于2010/10/094条评论建立Shell对象set sh=WScript.CreateObject(WScript.Shell)WSc
15、ript.Sleep 1000启动telnet,注意要保证telnet.exe程序所在的路径如c:winntsystem32在path环境变量中sh.Run telnet.exeWScript.Sleep 1000向telnet发送我们平时录入的命令sh.SendKeys open 192.168.10.120WScript.Sleep 1000sh.SendKeys ENTERWScript.Sleep 1000sh.SendKeys nENTERsh.SendKeys ENTERWScript.Sleep 1000发送登陆用户Usersh.SendKeys administratorENT
16、ERWScript.Sleep 1000发送登陆密码passsh.SendKeys ENTERWScript.Sleep 1000运行相关命令pwdsh.SendKeys cd liuxueENTER运行退出TELNET登陆命令sh.SendKeys mkdir 123ENTERsh.SendKeys echo quit12.txtENTERsh.SendKeys quitENTER5 挖Linux中的古老缩略语【2005-06-22 15:23】【Nigel McFarlane】【TechTarget】 Unix已经有35年历史了。许多人认为它开始于中世纪,这个中世纪是相对于计算机技术的产生
17、和发展来说的。在过去的时间里,Unix和它的子分支Linux收集有许多的历史和一些完全古老的语言。在这篇技巧文章中,我们将介绍一少部分古老的语言和它们的目的和作用,以及它们真正的来源。RC在Linux中,最为常用的缩略语也许是“rc”,它是“runcomm”的缩写即名词“run command”(运行命令)的简写。今天,“rc”是任何脚本类文件的后缀,这些脚本通常在程序的启动阶段被调用,通常是Linux系统启动时。如 /etc/rs是Linux启动的主脚本,而.bashrc是当Linux的bash shell启动后所运行的脚本。.bashrc的前缀“.”是一个命名标准,它被设计用来在用户文件中
18、隐藏那些用户指定的特殊文件;“ls”命令默认情况下不会列出此类文件,“rm”默认情况下也不会删除它们。许多程序在启动时,都需要“rc”后缀的初始文件或配置文件,这对于Unix的文件系统视图来说,没有什么神秘的。ETC在“etc/bin”中的“etc”真正代表的是“etcetera”(附加物)。在早期的Unix系统中,最为重要的目录是“bin”目录 (“bin”是“binaries”二进制文件编译后的程序的缩写),“etc”中则包含琐碎的程序,如启动、关机和管理。运行一个Linux必须的东西的列表是:一个二进制程序,etcetera,etcetera换句话说,是一个底层的重要项目,通常添加一些次
19、等重要的零碎事物。今天, “etc”包含了广泛的系统配置文件,这些配置文件几乎包含了系统配置的方方面面,同样非常重要。Bin今天,许多在Linux上运行的大型子系统,如GNOME或Oracle,所编译成的程序使用它们自己的“bin”目录(或者是 /usr/bin,或者是/usr/local/bin)作为标准的存放地。同样,现在也能够在这些目录看到脚本文件,因为“bin”目录通常添加到用户的PATH路径中,这样他们才能够正常的使用程序。因此运行脚本通常在bin中运行良好。TTY在Linux中,TTY也许是跟终端有关系的最为混乱的术语。TTY是TeleTYpe的一个老缩写。Teletypes,或者
20、 teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,和古老的电报机区别并不是很大。之后,当计算机只能以批处理方式运行时(当时穿孔卡片阅读器是唯一一种使程序载入运行的方式),电传打字机成为唯一能够被使用的“实时”输入/输出设备。最终,电传打字机被键盘和显示器终端所取代,但在终端或 TTY接插的地方,操作系统仍然需要一个程序来监视串行端口。一个getty“Get TTY”的处理过程是:一个程序监视物理的TTY/终端接口。对一个虚拟网络沮丧服务器(VNC)来说,一个伪装的TTY(Pseudo-TTY,即家猫的TTY,也叫做“PTY”)是等价的终端
21、。当你运行一个xterm(终端仿真程序)或GNOME终端程序时,PTY对虚拟的用户或者如xterm一样的伪终端来说,就像是一个TTY在运行。“Pseudo”的意思是“duplicating in a fake way”(用伪造的方法复制),它相比“virtual”或“emulated”更能真实的说明问题。而在现在的计算中,它却处于被放弃的阶段。Dev从TTY留下的命令有“stty”,是“set tty”(设置TTY)的缩写,它能够生成一个配置文件/etc/initab(“initialization table”,初始表),以配置gettys使用哪一个串口。在现代,直接附加在Linux窗口上的
22、唯一终端通常是控制台,由于它是特殊的TTY,因此被命名为“console”。当然,一旦你启动X11,“console”TTY就会消失,再也不能使用串口协议。所有的TTY都被储存在“/dev”目录,它是“physical devices”(物理设备)的缩写。以前,你必须在电脑后面的串口中接入一个新的终端时,手工修改和配置每一个设备文件。现在,Linux(和 Unix)在安装过程中就在此目录中创建了它所能向导的每一个设备的文件。这就是说,你很少需要自己创建它。随着硬件在电脑中的移出移进,这些名字将变得更加模糊不清。幸运的是,今天在Linux上的高等级软件块对历史和硬件使用容易理解的名字。举例来说,
23、嗯,Pango(http:/www.pango.org/)就是其中之一。如果你对这些内容很感兴趣,那么我建议你阅读宏大的,但有些以美国英语历史为中心的,由Eric S. Raymond撰写的Jargon File。它并没有解释所有在Unix中使用的术语,但是它给出了这些形成的大致情况。6 关于shell自动telnet脚本问题小弟想通过shell脚本登陆到多台主机去查看文件系统是否超过90%,以达到监控的目的,脚本如下:#!/bin/ksh(sleep 1;echo fit;sleep 1;echo fit001;sleep 2;echo df -k|awk if(NR%4=0 & $150)
24、 print $1;sleep 2;echo exit;sleep 1;)|telnet 192.1.1.0但是发现不能达到目的,貌似telnet不能满足管道,但是aix下没有expect;在论坛上找到前辈的代码,我改了以下:cd /testip=127.0.0.1usr=alfredpas=alfredcom1=df -k?inputfile=in #导入文件管道用的,不要改,这个值没有任何关系outputfile=out.log #最终导出的文件rm -fr $inputfilerm -fr $outputfilemknod $inputfile ptouch $outputfileexe
25、c 7$outputfileexec 8$inputfiletelnet $ip &7 &sleep 2;echo $usr $inputfilesleep 2;echo $pas $inputfilesleep 2;echo $com1 $inputfile在以上脚本执行的时候,日志文件能记录下结果,但是却会在该脚本调用的地方报错:getwinsize:ioctl: A specified file does not support the ioctl system call.sh -x后,发现是telnet $ip &7 &造成的?不知道是啥原因!本帖最后由 alfred1980 于 20
26、09-5-4 22:24 编辑7 编写telnet脚本的问题现在有一台服务器192.168.10.248开放了指定端口10001,当手工用telnet 发送数据时可以接收到,比如telnet 192.168.10.248 10001a a hava_new_conf #发送的数据,服务器屏幕有显示结果Connection closed by foreign host.我现在想写一个自动的telnet脚本,完成上面的功能。试了两种办法,均不行,请大家看看应该如何修改?#第一个脚本,仿照#!/bin/bashdata=cat test.txttempinput=inrm -fr $tempinputmknod $tempinput pexec 7$tempinputtelnet 192.168.10.248 10001 $tempinput#第二个脚本,仿照#!/bin/bashtelnet 192.168.10.248 10001 !a a have_new_conf!IAMTOP1982
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1