• 利用shell脚本提高效率(切换用户不需要输入密码)


    一、简便切换用户:

    切换用户,每次输入密码,比较麻烦,可以使用脚本交互式登录实现,每次只要输入./su_ 并tab,执行此脚本,即可切换至root用户,比较简单。如下:

    hao@hao-ubuntu:~$ cat su_root.sh
    #!/usr/bin/expect

    set timeout 3

    spawn su
    expect "Password:"
    exec sleep 1
    send "root\r"
    expect "#"
    interact
    hao@hao-ubuntu:~$ ./su_root.sh
    spawn su
    Password:

    root@hao-ubuntu:/home/hao#
    当然也可以增加一些if判断之类,让其他用户切换也不必输入密码。具体根据个人喜欢自己修改完善。

    二、交互式登录:

    通过expect,实现交互式登录,且看如下脚本:

    hao@hao-ubuntu:~$ cat login.sh
    #!/usr/bin/expect -f
    set ipaddr "192.168.77.58"
    set passwd "hao"
    spawn ssh hao@$ipaddr
    #spawn 意思是执行命令,expect内命令,shell中不存在
    expect {
    "yes/no" { send "yes\r"; exp_continue}
    "password:" { send "$passwd\r" }
    }
    #expect "]# "
    #echo '----------------login $ipaddr SUCC!--------------'
    #send "touch a.txt\r"
    #意思为发送命令
    #send "exit\r"
    expect eof
    exit

    ===========================================

    另外尝试修改sh,或者alias,使其随处可以调用,而不是只能到固定位置执行脚本才可以,或许更为优化。

    当然此脚本稍微可以带来便利,但是也存在安全风险。

    补充一点内容:

    对如上内容可以详细解释如下:expect spawn、linux expect 用法

    使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。 
      脚本代码如下: 
      ############################################## 
      #!/usr/bin/expect 
      set timeout 30 
      spawn ssh -l username 192.168.1.1 
      expect "password:" 
      send "ispass\r" 
      interact 
      ############################################## 
      1. [#!/usr/bin/expect] 
      这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。 
      注意:这一行需要在脚本的第一行。 
      2. [set timeout 30] 
      基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒 
      3. [spawn ssh -l username 192.168.1.1] 
      spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。 
      它主要的功能是给ssh运行进程加个壳,用来传递交互指令。 
      4. [expect "password:"] 
      这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒 
      5. [send "ispass\r"] 
      这里就是执行交互动作,与手工输入密码的动作等效。 
      温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。 
      6. [interact] 
      执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行 
      #!/usr/bin/expect #注意安装的路径,不确定 whereis expect 一下 
      # Change a login shell to bash 
      set user [lindex $argv 0] 
      spawn bash $user 
      expect "]:" 
      send "/bin/bash " 
      expect eof 
      exit

     

    使用expect自动登录

    一,什么是expect?
    在做系统管理时,我们很多时候需要输入密码,例如:连接 ssh,连接ftp,
    那么如何能做到不输入密码吗?
    我们需要有一个工具,能代替我们实现与终端的交互,
    那么,就是它:expect,管理员的最好的朋友之一 
    它能够代替我们实现与终端的交互,我们不必再守候在电脑旁边输入密码,
    或是根据系统的输出再运行相应的命令,
    这些都可以由expect代替我们来完成

    说明:expect到底是什么?
    expect是一种脚本语言,使用起来非常简单,我们看后面的例子即可以了解到了

    三,安装expect

    备注:因为expect是基于tcl的,所以需要你的系统中安装有tcl
    如何检查?
    [root@dev ~]# whereis tcl
    tcl: /usr/lib/tcl8.4 /usr/share/tcl8.4
    如果看不到结果,请先安装tcl
    安装,
    [root@dev ~]# yum install expect
    也可以从http://rpm.pbone.net下载for相应发行版的rpm包

    补充部分详见http://blog.csdn.net/ysdaniel/article/details/7059511

    赠人玫瑰
    手留余香

    我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我

  • 相关阅读:
    高等数学(完结版)
    数据结构(c语言描述)
    leetcode-mid- 50. Pow(x,n)-NO
    leetcode-mid-math
    leetcode-mid-math-202. Happy Number-NO
    leetcode-mid-dynamic programming- Longest Increasing Subsequence-NO
    leetcode-mid-design-380. Insert Delete GetRandom O(1)
    leetcode-mid-design-297. Serialize and Deserialize Binary Tree¶-NO -??
    leetcode-mid-dynamic programming-322. Coin Change
    leetcode-mid-dynamic programming-62. Unique Paths
  • 原文地址:https://www.cnblogs.com/haochuang/p/2507457.html
Copyright © 2020-2023  润新知