版权所有IBM公司2010商标远程监视主机会话第1页,共9远程监视主机会话构建简单的shell脚本,实时观察主机用户行为OriPomerantz(orip@us.
ibm.
com)技术课程开发人员IBM2010年9月20日用户可以使用3270终端模拟器访问z/OS主机.
在这篇文章中,将学习如何构建简单的UNIX或Linuxshell脚本,利用该脚本通过第二个终端模拟器实时查看主机用户的一举一动.
用户通常通过3270终端模拟器——例如IBMPersonalCommunications(PCOMM是一个主机通信和终端模拟包,提供了3270、5250和VT模拟功能,提供SNA应用程序支持、集成,以及SNA和TCP/IP连接)——连接主机(Systemz).
如果这些用户与支持团队在一个地点,那么支持人员就能容易地帮助他们解决问题.
但是,现在的用户通常分布在不同的地方.
有的是在家里工作的员工,有的是参加在线培训课程(instructor-ledonline,ILO)的学员,所以想通过查看用户的屏幕来帮助他们解决问题通常是不现实的.
在这篇文章中,将学习如何构建一个在UNIX或Linux上运行的简单shell脚本,由这个脚本可以进入3270终端模拟器的用户会话(3270终端模拟器会话是访问z/OS主机会话的入口).
通过该脚本,能够运行第二个终端模拟器,用这个模拟器可以实时地看到用户的一举一动.
首先来看看终端模拟的工作方式.
终端模拟会话的工作方式终端模拟器通常用TCP/IP连接主机.
根据IP地址和端口号来区分会话,IP地址指定了参与会话的计算机,端口号则表示计算机上的程序.
主机上用来侦听终端模拟器的telnet端口是端口23.
developerWorksibm.
com/developerWorks/cn/远程监视主机会话第2页,共9图1.
端口和IP地址图1显示了两台连接到主机的PC.
主机使用IP地址9.
1.
2.
3和端口23.
第一台PC有两个PCOMM实例—一个运行在端口5000上,另一个运行在端口5025上.
第二台PC上运行了一个实例,运行在端口5000上.
因为每个通信都包含源IP地址和源端口,所以主机能够区分这三个不同的连接.
选择的操作系统:Knoppix如果没有使用UNIX或Linux系统,我建议使用Knoppix.
这个Linux版本可以直接从光盘上运行,所以可以在任何PC上运行它,甚至不需要使用PC的硬盘.
在只有256MB内存的老PC上也能运行.
在Knoppix启动后,单击启动命令行窗口的图标,如图2所示:图2.
Knoppix命令行图标要成为系统管理员,请运行sudobash命令.
每次打开新的命令行窗口时都要重新运行它.
多数网络都使用DHCP协议自动分配IP地址.
要检查是否拥有IP地址,请运行以下命令:ipconfigeth0.
如果没有IP地址,就会被分配一个地址以及路由器的地址.
要启动网络功能,请运行以下命令:ipconfigeth0routeadddefaultgw要检验到主机的连接,请运行以下命令:telnet.
如果能够工作,可以使用Ctrl-]退出终端或启动另一个命令行窗口.
如果有必要,可以运行sudobash.
监视单个用户的连接这一节介绍:ibm.
com/developerWorks/cn/developerWorks远程监视主机会话第3页,共9如何设置使用管道的单一代理命令在设置期间做了什么如何添加监视tap使用管道的单一代理第一步是创建一个代理.
我们并不直接连接主机,而是让用户连接到运行Knoppix或其他版本Linux的PC,然后让这台计算机连接到主机(如图3所示):图3.
用户通过代理连接以root用户身份运行以下命令:mknodpc2mfpmknodmf2pcpcatpc2mf|nc23|teetap|teemf2pc&catmf2pc|nc-l-p2300|teemf2pc&现在用3270终端模拟器在2300端口上连接到运行Linux的计算机—应该被重定向到主机.
连接完成之后,应该停止第三行、第四行执行的所有命令.
除非后台运行其他命令,否则可以使用下面的命令执行:kill%1kill%2工作方式前两行命令创造一对先进先出(FIFO)管道.
mknodpc2mfp#ForthestreamgoingfromPCtomainframemknodmf2pcp#ForthestreamgoingfrommainframetoPC第三行:catpc2mf|nc23|teetap|teemf2pc&复杂一些.
它包含四个命令,这四个命令通过管道连接在一起.
这意味着第一个命令的输出是第二个命令的输入;第二个命令的输出是第三个命令的输入;第三个命令的输出是第四个命令的输入.
这有点像在JCL作业中使用PASS关键字将一个作业步骤的输出传递给另一个作业作为输入:catpc2mf从管道读入从PC到主机的数据流.
nc23打开到主机的TCP连接,并将管道的输出发送到该连接.
主机的输出然后进入下一部分,teetap.
tee命令的功能是作为T管道,将输入(主机的输出)发送到下一条命令和称为tap的文件.
后面在监视的时候将使用这个文件.
developerWorksibm.
com/developerWorks/cn/远程监视主机会话第4页,共9teemf2pc将主机的输出发送到mf2pc管道.
它的末尾有一个&符号,告诉计算机在用户执行其他操作的时候,在后台运行该命令.
第四行与第三行类似:catmf2pc|nc-l-p2300|teemf2pc&catmf2pc命令读取从主机到终端模拟器的流.
nc-l-p2300命令侦听TCP端口2300.
如果程序(例如终端模拟器)连接到该端口,就会通过该连接得到来自主机的流.
发送到该连接的任何内容都会转到下一个程序……teepc2mf则将内容放到第三行命令要检索的管道内.
图4演示了这个过程.
图4.
简单代理添加监视tap来自主机的输出还要发送到称为tap的文件内.
因为流的格式是EBCDIC而非ASCII,所以在Linux上没有方便的方法可以查看它.
但是,在停止代理之后,可以运行下面这些命令重新启动一个可以从另一个3270终端模拟器访问的tap:rm-ftapmknodtappcatpc2mf|nc23|teetap|teemf2pc&catmf2pc|nc-l-p2300|teemf2pc&cattap|nc-l-p2301&前两行删除现有的tap文件,并用另一个FIFO管道代替它.
第三和第四行运行简单代理,就像前面的代码示例中做的那样.
最后一行读取来自tap的信息,并将信息发送到nc-l-p2301,它将侦听TCP端口2301.
如果程序(例如终端模拟器)连接到端口2301,就会通过连接得到主机截取的流.
但是,它发送回来的内容会被发送到执行该命令的命令提示符.
图5演示了安装了该tap的代理.
ibm.
com/developerWorks/cn/developerWorks远程监视主机会话第5页,共9图5.
带有监视tap的简单代理使用同一个TCP端口的多个连接前面的解决方案能够工作,但是它要求每个用户连接到不同的端口,还需要手动分配端口.
更好的解决方案应该能用一个TCP端口服务多个用户.
清单1的解决方案使用了称为proxy.
sh的shell脚本:清单1.
Shell脚本proxy.
sh支持一个端口上的多个连接#!
/bin/sh#Runanothernctolistenforthenextconnectionnc-l-p2300-c.
/proxy.
shCreateapipeforthetaptap=/tmp/proxy.
sh.
$$mknod$tapp#Startthetapconnectioncat$tap|nc-l-p$$&echoConnectionfrom`date`tappedatport$$>>taplist#Becausethisscriptisexecutedbync,theinputandoutput#arealreadytheTCPconnectiontotheuser.
Usenctoconnect#tothemainframenc23|tee$tap用chmod+xproxy.
sh将脚本设为可执行,并用nc-l-p2300-c.
/proxy.
sh执行脚本.
每次用户连接代理上的端口2300时,用户都会连接到主机,并打开一个新端口来监视用户.
为了得到端口的值,要查询文件taplist.
该文件中将包含连接和端口的日期和时间.
如果您希望监视的连接之后再没有生成用户连接,那么该连接就是文件的最后一行.
第一行第一行#!
/bin/sh告诉操作系统,本文件是脚本文件,需要用/bin/sh程序(也称为shell)解释.
其他以#字符开始的行是注释,执行时将被忽略.
developerWorksibm.
com/developerWorks/cn/远程监视主机会话第6页,共9侦听连接在使用命令行参数-l-p-c执行nc时,nc将一直等待,直到在该端口上接收到连接,然后执行指定的命令.
来自TCP连接的流是命令的标准输入,命令的标准输出通过TCP连接发送回去.
因为nc在接收到连接并执行proxy.
sh时会停止侦听端口,所以脚本做的第一件事是启动另一个nc实例继续作同样的事:nc-l-p2300-c.
/proxy.
sh&.
&表示这个命令将在后台执行,在完成之前不会停止脚本.
创建tap因为可能同时运行这个脚本的多个实例,所以需要为每个实例创建独立的FIFO管道.
为了区分不同的管道,脚本使用了$$,它指的是当前的进程ID(也称为pid).
同时运行的对同一个脚本的多个调用将使用不同的进程ID.
#Createapipeforthetaptap=/tmp/proxy.
sh.
$$mknod$tapp第一行是个注释.
第二行将变量tap的值设为/tmp/proxy.
sh.
.
实际上是管道的文件名.
在第三行,$tap由前一行生成的变量的值代替.
这与启动作业的用户在JCL作业中使用&SYSUID类似.
tap连接下一步是创建用来监视用户的tap连接.
#Startthetapconnectioncat$tap|nc-l-p$$&echoConnectionfrom`date`tappedatport$$>>taplist第一行还是注释.
第二行与前面创建的单连接代理中的tap类似,不过有两个区别:管道的名称是$tap.
用来监视用户的端口号不能是常数,因为脚本会同时在多个实例中运行.
一次只有一个进程能侦听特定端口.
所以监视用户需要连接到与proxy.
sh实例的pid相同的端口号.
这个解决方案带来一个新问题.
监视器如何知道要连接的端口号第三行就是用来解决这一问题的.
echo命令接受从命令行得到的参数,并将参数写进输出.
>>taplist部分将命令的输出附加到文件taplist末尾.
多数消息都是这样写入taplist的,但有两个部分将进行解释:`date`和$$.
如果shell脚本的某一部分用单引号(也称为重单符)括起来,那么将执行这个部分并将结果放在该命令行内.
在上面的代码中,`date`执行date命令,报告当前日期和时间,然后将得到的日期和时间放在消息内.
$$的功能同往常一样:pid,也作为监视用户的端口号.
主机连接脚本的最后一部分连接到主机.
因为脚本的输入和输出已经连接到用户的终端模拟器,所以这一部分就非常简单.
ibm.
com/developerWorks/cn/developerWorks远程监视主机会话第7页,共9#Becausethisscriptisexecutedbync,theinputandoutput#arealreadytheTCPconnectiontotheuser.
Usenctoconnect#tothemainframenc23|tee$tap在在线培训课程中使用代理要在在线培训课程上使用这个系统,请在网络上配置一个Knoppix代理,然后让学员连接到代理.
教师随后可以根据需要打开任意多个终端模拟器实例以监视学员的活动,并最小化它们.
如果学员练习时发现问题,教师可以通过查看相应的终端模拟器了解学员的操作.
每次学员按回车时,他的终端模拟器输出就会与教师的模拟器同步.
如果教师不知道哪个终端模拟器窗口与该学员对应,可以要求学员输入特定形式的关键字,然后查看哪个窗口显示了该关键字.
麻花云怎么样?麻花云公司成立于2007年,当前主打产品为安徽移动BGP线路,数据中心连入移动骨干网。提供5M,10M大带宽云主机,香港云服务器产品,数据中心为香港将军澳机房,香港宽频机房 cn2-GIA优质线路、采用HYPER-V,KVM虚拟技术架构一、麻花云官网点击直达麻花云官方网站合肥网联网络科技有限公司优惠码: 专属优惠码:F1B07B 享受85折优惠。最新活动 :双11 云上嗨购 香港云主...
官方网站:点击访问创梦网络宿迁BGP高防活动方案:机房CPU内存硬盘带宽IP防护流量原价活动价开通方式宿迁BGP4vCPU4G40G+50G20Mbps1个100G不限流量299元/月 209.3元/月点击自助购买成都电信优化线路8vCPU8G40G+50G20Mbps1个100G不限流量399元/月 279.3元/月点击自助购买成都电信优化线路8vCPU16G40G+50G2...
BuyVM在昨天宣布上线了第四个数据中心产品:迈阿密,基于KVM架构的VPS主机,采用AMD Ryzen 3900X CPU,DDR4内存,NVMe硬盘,1Gbps带宽,不限制流量方式,最低$2/月起,支持Linux或者Windows操作系统。这是一家成立于2010年的国外主机商,提供基于KVM架构的VPS产品,数据中心除了新上的迈阿密外还包括美国拉斯维加斯、新泽西和卢森堡等,主机均为1Gbps带...