有些时候,在面对开发机的时候,不断的telnet和不断的command自己的命令确实非常麻烦,需要一些自动测试或者自动部署的需求。然而面对telnet很多同学都跟我一样一开始觉得无法通过管道等传用户名和密码给telnet进行自动化执行。但其实还是有解决办法的,目前解决办法大致分一共有两种,一种是用第三方的expect这个命令,它可以交互式的根据终端返回的信息可以在你事先设定好的游戏规则之下进行命令,比如expect "Hello", send "Hello, too",表示当终端返回Hello的时候我就返回Hello,too,不然就用其中的set timeout进行超时等待。具体的用法同学可以参考相关细节,总之,expect绝对是服务器管理员的利器,如果你有空,确实可以抽空好好学习一下这个命令。但麻烦的就是它不是系统标配的,需要后期安装。

第二种方法比较简单,有些同学可能会跟我一样,想着兼容性方面,比如我这个脚本有可能会给我团队的队友一起使用,难道要求他们都去装expect吗?有没有简单的办法可以让shell来帮我们进行telnet并自动执行一些简单的命令呢?答案是有的,那就是利用管道,echo,telnet的三者结合,先看以下demo.

#!/bin/bash
#==============================================
# Author: Ricky.K
# Description: Auto telnet and run command
#==============================================
echo "My own command..." &&
(sleep ; echo "user"; \
sleep ; echo "password"; \
sleep ; echo "cd /usr/local"; \
sleep ; echo "./test.sh"; \
while [[ true ]]; do \
sleep ; \
done;) | telnet 192.168.1.1

可以看到,在输入完自己命令之后,可以通过小括号(用大括号需要注意左边第一个括号和第一个命令有一个空格)将命令包起来,这样整个的管道就是对其中各个命令的全部起作用,利用echo,将用户名,密码,以及你要输入的命令通过管道传给telnet,即实现了自动化的telnet脚本命令实现。同时需要注意,在最后一个命令(非sleep)之前,如果直接传给telnent,你会发现命令根本就没有执行完或者压根就没执行就被你断开链接了,这个时候你需要用while循环或者sleep一个比较大的值来让它有时间进行命令响应,这也是需要考虑的。

telnet自动化并没有我们想的这么复杂,用用简单命令一样可以实现这些功能,也反应了UNIX经典的设计哲学,通过管道和命令组装,你就拥有了世界上最好的武器。

自动Telnet远程登陆命令的更多相关文章

  1. 华为设备配置telnet远程登陆命令

    user-interface vty 0 4 进入0~4前五个的VTY用户界面进行整体配置 authentication-mode password 设置验证方式为密码 user privilege ...

  2. telnet远程登陆

    这篇文章是第二次更新,内容为telnet远程登陆路由器,非常简单.直接进入正题,在网络配通的情况下,为路由器设置登陆密码和管理员密码,就可以通过pc机远程管理路由器或交换机. 目的: 网络拓扑图如下, ...

  3. python实现Telnet远程登陆到设备并执行命令

    #encoding=utf-8 import telnetlib import time def do_telnet(Host, username, password, finish, command ...

  4. IP路由实验之---Telnet远程登陆

    实验设备:一台华三路由器,一台PC 骤一,为路由器端口配置 IP 地址 <H3C>system-view #进入系统视图 [H3C] / #进入0/0端口 [H3C-Ethernet-/] ...

  5. debian系统搭建telnet服务器以及telnet远程登陆--加油

    1.安装软件 sudo apt-get install telnet* 2.创建telnet文件 vim /etc/xinetd.d/telnet telnet内容 1 service telnet ...

  6. 禁止root用户直接远程telnet/ssh登陆

    AIX 封闭root,只能使用su登录root用户,禁止root用户直接远程登陆. 1.  禁止telnet登录 smit chuser   ->root       ->User can ...

  7. mac 用密钥远程登陆

    window远程登陆命令:mstsc A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A ...

  8. [转载]Ubuntu下ssh服务的安装与登陆(ssh远程登陆)

    转载地址:http://blog.csdn.net/zht666/article/details/9340633 Ubuntu默认并没有安装ssh服务,如果通过ssh远程连接到Ubuntu,需要自己手 ...

  9. Linux 远程登录命令telnet

    一.telnet简介: telnet命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准 ...

随机推荐

  1. 数据结构(堆):SCOI 2009 生日礼物

    Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩 珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个 ...

  2. Python修饰器

    Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都 ...

  3. android EditText监听事件及参数详解

    editText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence ...

  4. Android为应用在桌面添加一个快捷方式

    Intent addIntent=new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); Parcelable ic ...

  5. Java多线程Thread.yield(),thread.join(), Thread.sleep(200),Object.wait(),Object.notify(),Object.notifyAll()的区别

    Thread.yield(),在某个线程里调用Thread.yield(),会使这个线程由正在运行的running状态转变为等待cpu时间片的runable状态.join()是Thread类的一个非s ...

  6. PostgreSQL和GreenPlum数据库的区别

    PostgreSQL   PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为POSTGRES,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS).Po ...

  7. Java日期相关操作

    1.获得日期 在旧版本 JDK 的时代,有不少代码中日期取值利用了 java.util.Date 类,但是由于 Date 类不便于实现国际化,其实从 JDK1.1 开始,就更推荐使用 java.uti ...

  8. js中正则表达式的使用

    1,作用:匹配一个字符串中的一些内容2,声明和使用: 1),构造函数 var reg=new RegExp(/表达式/) 2),字面量 var reg=/表达式/ 推荐使用 eg: var reg=/ ...

  9. ios中键值编码kvc和键值监听kvo的特性及详解

    总结: kvc键值编码  1.就是在oc中可以对属性进行动态读写(以往都是自己赋值属性)           2. 如果方法属性的关键字和需要数据中的关键字相同的话                  ...

  10. Deme_遥感控制物体移动(涉及遮罩,小摄像机跟随)

    using UnityEngine; using System.Collections; using UnityEngine.EventSystems; public class JoyControl ...