linux shell except tcl login ssh Automatic interaction

/***************************************************************************************
 *               linux shell except tcl login ssh Automatic interaction
 * 声明:
 *     本程序是使用except自动登入远程目标机,并且执行commands文件中的命令给定的命令,
 * 可以对多个目标机进行测试,目标机的IP保存在shell的数组中,目前只支持相同的账户和密码。
 *
 *                                               2015-9-15 晴 深圳 南山平山村 曾剑锋
 **************************************************************************************/

                          \\\\\\\\-*- 目录 -*-/////////
                          |   一、cat autorun.sh      |
                          |   二、cat ssh.sh          |
                          |   三、cat commands        |
                          |   四、运行结果:          |
                          \\\\\\\\\\\\\\///////////////

一、cat autorun.sh
    #!/bin/bash

    # ssh登入用户名,请修改为目标用户名,等号两边不能空格
    user=zengjf
    # ssh登入密码,请修改为目标用户密码,等号两边不能空格
    passwd=zengjf
    # 修改这个目标IP数组,每个IP占一行
    ips=(
        192.168.0.65
        127.0.0.1
    )

    count=0
    for ip in ${ips[@]} ; do 

        # 执行自动交互脚本,传入用户名、密码、IP作为参数
        # 后台执行,多进程并行执行
        ./ssh.sh $user $passwd $ip &

        # 显示部分放在后面是为了后运行结果,不用再shell窗口中去翻页查看
        echo
        echo   "-----------------------------------------------------"
        printf "|        ip = %-15s     NO. = %03d         |\n" $ip $count
        echo   "-----------------------------------------------------"
        echo 

        count=$(($count+1))
    done

    # 提示运行结束
    echo -e  "\033[32m|||||||||||||||||||||||||||||||||||||||||||||||||||||"
    echo -e  "-----------------------------------------------------"
    echo -e  "|                      TASK OVER                    |"
    echo -e  "-----------------------------------------------------"
    echo -e  "|||||||||||||||||||||||||||||||||||||||||||||||||||||\033[0m"

二、cat ssh.sh
    #!/usr/bin/expect -f

    # reference web pages:
    #
    # 1. linux expect auto login ssh and ftp:
    #    http://blog.51yip.com/linux/1462.html
    # 2. Array Initialization in Expect script:
    #    http://stackoverflow.com/questions/17544467/array-initialization-in-expect-script
    # 3. Expect Script Tutorial: Expressions, If Conditions, For Loop, and While Loop Examples:
    #    http://www.thegeekstuff.com/2011/01/expect-expressions-loops-conditions/
    # 4. Read file into String and do a loop in Expect Script:
    #    http://stackoverflow.com/questions/17662391/read-file-into-string-and-do-a-loop-in-expect-script
    # 5. tcl sleep command:
    #    http://www.wellho.net/forum/The-Tcl-programming-language/tcl-sleep-command.html

    # 参数必须满足要求,不满足要求,给出提示信息,并退出
    if {$argc != 3} {
        puts ""
        puts "USAGE:"
        puts "\t ./ssh.sh <username> <passwd> <host_ip>"
        puts ""
        exit -1
    }

    # 设置等待延时时间
    set timeout 5  

    # 获取ssh连接的用户名
    set ssh_user [lindex $argv 0]
    # 获取ssh连接的密码
    set password [lindex $argv 1]
    # 获取ssh连接的IP
    set host_ip  [lindex $argv 2]

    # 测试IP是否可用,不可用,给出提示信息,并退出
    spawn ping -c1 -w1 $host_ip
    expect {
        " 0%"   { puts "$host_ip was available" }
        "100%*" { puts "$host_ip was not available"; exit -1 }
    } 

    # 读取命令文件,每一行一条命令
    set infile    [open "./commands" r]
    set file_data [read $infile]
    set cmds      [split $file_data "\n"]

    # 显示读取到的指令
    puts "show commands:"
    foreach {cmd} $cmds {
        puts "\t$cmd"
    }

    # ssh远程连接到目标机器
    spawn ssh ${ssh_user}@${host_ip}
    expect {
        "*yes/no"    { send "yes\r"; exp_continue }
        "?assword:*" { send "${password}\r" }
    } 

    # 延时500毫秒,再继续运行
    #after 500

    # 等待目标返回,并跳转到目标机的根目录
    expect "\."
    send "cd / \r"  

    # for循环执行目标指令
    foreach {cmd} $cmds {
        expect "\."
        send "${cmd} \r"
    }

    # 退出远程连接
    expect "\."
    send "exit \r"

    # 等待远程结束
    expect eof

三、cat commands
    ls -al
    pwd

四、运行结果:
    zengjf@zengjf-virtual-machine:~/zengjf/software/shell/autoSSH$ ./auto.sh
    spawn ping -c1 -w1 192.168.0.65
    PING 192.168.0.65 (192.168.0.65) 56(84) bytes of data.

    --- 192.168.0.65 ping statistics ---
    2 packets transmitted, 0 received, 100% packet loss, time 999ms

    192.168.0.65 was not available

    -----------------------------------------------------
    |        ip = 192.168.0.65        NO. = 000         |
    -----------------------------------------------------

    spawn ping -c1 -w1 127.0.0.1
    PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
    64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.020 ms

    --- 127.0.0.1 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.020/0.020/0.020/0.000 ms
    127.0.0.1 was available
    show commands:
        ls -al
        pwd

    spawn ssh zengjf@127.0.0.1
    zengjf@127.0.0.1's password:
    Welcome to Ubuntu 12.04.2 LTS (GNU/Linux 3.5.0-23-generic i686)

     * Documentation:  https://help.ubuntu.com/

    New release '14.04.1 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.

    Last login: Tue Sep 15 15:14:34 2015 from localhost
    cd /
    ls -al
    pwd 

    exit
    zengjf@zengjf-virtual-machine:~$ cd /
    zengjf@zengjf-virtual-machine:/$ ls -al
    total 104
    drwxr-xr-x  25 root root  4096 Nov 13  2014 .
    drwxr-xr-x  25 root root  4096 Nov 13  2014 ..
    drwxr-xr-x   2 root root  4096 Aug 12  2013 bin
    drwxr-xr-x   3 root root  4096 Aug 12  2013 boot
    drwxr-xr-x   2 root root  4096 Aug 12  2013 cdrom
    drwxr-xr-x  15 root root  4320 Sep 15 13:03 dev
    drwxr-xr-x 134 root root 12288 Sep 15 13:03 etc
    drwxr-xr-x   4 root root  4096 Sep  4  2013 home
    lrwxrwxrwx   1 root root    32 Aug 12  2013 initrd.img -> boot/initrd.img-3.5.0-23-generic
    drwxr-xr-x  24 root root  4096 Nov 18  2014 lib
    drwxr-xr-x   2 root root  4096 Nov 13  2014 lib64
    drwx------   2 root root 16384 Aug 12  2013 lost+found
    drwxr-xr-x   6 root root  4096 Sep 14 15:01 media
    drwxr-xr-x   4 root root  4096 May 16  2014 mnt
    drwxr-xr-x   3 root root  4096 Aug 24 14:56 nfsroot
    drwxr-xr-x   2 root root  4096 Feb 14  2013 opt
    dr-xr-xr-x 190 root root     0 Sep 15 13:03 proc
    drwx------  11 root root  4096 Aug 20 10:23 root
    drwxr-xr-x  24 root root   940 Sep 15 15:14 run
    drwxr-xr-x   2 root root  4096 Nov 13  2014 sbin
    drwxr-xr-x   2 root root  4096 Mar  5  2012 selinux
    drwxr-xr-x   2 root root  4096 Feb 14  2013 srv
    dr-xr-xr-x  13 root root     0 Sep 15 13:03 sys
    drwxrwxrwt  14 root root  4096 Sep 15 14:17 tmp
    drwxr-xr-x  11 root root  4096 Nov 13  2014 usr
    drwxr-xr-x  13 root root  4096 Sep 13 21:45 var
    lrwxrwxrwx   1 root root    29 Aug 12  2013 vmlinuz -> boot/vmlinuz-3.5.0-23-generic
    zengjf@zengjf-virtual-machine:/$ pwd
    /
    zengjf@zengjf-virtual-machine:/$
    zengjf@zengjf-virtual-machine:/$ exit
    logout
    Connection to 127.0.0.1 closed.

    -----------------------------------------------------
    |        ip = 127.0.0.1           NO. = 001         |
    -----------------------------------------------------

    |||||||||||||||||||||||||||||||||||||||||||||||||||||
    -----------------------------------------------------
    |                      TASK OVER                    |
    -----------------------------------------------------
    |||||||||||||||||||||||||||||||||||||||||||||||||||||
    zengjf@zengjf-virtual-machine:~/zengjf/software/shell/autoSSH$
    

 

时间: 2024-09-20 12:08:26

linux shell except tcl login ssh Automatic interaction的相关文章

linux Shell入门:掌握Linux,OS X,Unix的Shell环境_linux shell

在Linux或类Unix系统中,每个用户和进程都运行在一个特定环境中.这个环境包含了变量.设置.别名.函数以及更多的东西.下面是对Shell环境下一些常用命令的简单介绍,包括每个命令如何使用的例子,以及在命令行下设定你自己的环境来提高效率. 找出你当前的shell 在终端应用中输入下面命令中的任意一个: ps $$ ps -p $$ 或者 echo "$0" 输出范例: 图1:找出当前的shell 找出所有已安装的shell 找到已安装shell的完整路径: type -a zsh t

Linux shell编程基础 三、shell的基本结构

shell结构大体是由设定变量.内置命令.shell的语法结构.函数组成. 使用实例说明:test.sh #!/bin/bash #说明使用/bin/bash作为这个脚本的解释器 #定义一个函数 function my_fun () { echo "Hello, $1,today is $2" } #定义连个变量 name=$1 today=`date` #函数调用 my_fun "$name" "$today" 上面的这个脚本要想运行还需要做一

Linux安全攻略之SSH服务连接时的常见问题与解答

  什么是SSH呢? SSH的英文全称是Secure SHell.通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗.还有一个额 外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度.SSH有很多功能,它既可以代替telnet,又可以为ftp.pop.甚至ppp提供一 个安全的"通道".SSH客户端与服务器端通讯时,用户名及口令均进行了加密,有效防止了对口令的窃听.最初SSH是由芬兰的一家公

Linux shell脚本基础学习详细介绍(完整版)

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可

Linux shell用法和技巧(转)

使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和l技巧.当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务.于是,我开始在一个文本文件里记录这些用法,并放在我的Dropbox里,现在,向大家分享这个文件.这个文件我会不断的更新.需要注意一点的是,有些用法需要在你的Linux系统里安装额外的软件. UPDATE: November 25, 2013 检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 &&

Linux Shell脚本之Gitlab远程备份

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1686043 注:Gitlab是一个git服务程序,有web图形界面和一系列管理工具,具体详细介绍可以Google it. 这一篇可以说是上一篇<Linux Shell脚本之Atlassian confluence远程备份方法>的姊妹篇.其说明和原理是和上一篇是一样的,其核心原理都是core dump.scp.ss

linux shell命令常用技巧

Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty.其中/dev/null将会丢掉所有写入它的数据,换句换说,当程序将数据写入到此文件时,会认为它已经成功完成写入数据的操作,但实际上什么事都没有做.如果你需要的是命令的退出状态,而非它的输出,此功能会非常有用,见如下Shell代码:  代码如下 复制代码     /> vi test_dev_null.sh         #!/bin/bash     if grep hello TestFile

Linux shell脚本实现CPU预警_linux shell

如果CPU占用率持续达到80以上则调用打印java线程占用率堆栈的脚本,见https://github.com/oldratlee/useful-shells/blob/master/show-busy-java-threads.sh,具体用法见他的github wiki! #!/bin/bash #cpu idle percent cpu_idle=`top -b -d 1 -n 2 | grep Cpu | awk 'NR>1{print $5}' | cut -f 1 -d ".&q

Linux shell脚本基础学习详细介绍(完整版)第1/2页_linux shell

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编辑好脚本时,如果要执行该脚本,还必须使其可执行.要使脚本可执行:编译