`

在 Linux 命令行脚本中执行 sudo 时自动输入密码

阅读更多

原文链接:http://blog.163.com/shen_ys/blog/static/657664201475101236733/

 

使用 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

分享到:
评论

相关推荐

    sudo提权自动输入密码--java执行交互式命令

    参考了java版的expect4j,expectj的原理,进行了极大的简化,可完成基本的功能: 1,运行java代码,执行交互式命令 2,sudo提权,自动输入密码(echo "password" | sudo -S mkdir /opt/test)

    快乐的 Linux 命令行(中英文PDF)

    《快乐的 Linux 命令行》是一本深入浅出的Linux命令行指南,它旨在帮助用户更好地理解和掌握Linux操作系统中的命令行界面。该书分为中英文两部分,方便不同语言背景的学习者阅读。目录结构清晰,使得学习更加系统化...

    Linux命令行概述.rar

    而Linux命令行是Linux系统的核心工具之一,它允许用户通过文本输入指令来执行各种操作,无需图形化界面。这篇文档将对Linux命令行进行详尽的概述,帮助你更好地理解和掌握这一强大工具。 1. **命令行基础** - **...

    自学习,Linux命令行与Shell脚本编程笔记!word版本

    在阅读这份笔记时,建议结合实际操作练习,尝试编写简单的脚本并运行,以加深理解。随着经验的积累,你将能够利用Linux命令行和Shell脚本解决更复杂的系统问题,提高工作效率。 总之,Linux命令行与Shell脚本编程是...

    windows下Linux命令行小工具

    标题“windows下Linux命令行小工具”所指的是一款能够让用户在Windows操作系统中使用Linux命令行工具的软件包。这款工具通常包含了一系列常用的Linux命令行程序,使得在Windows环境下开发、管理和维护Linux服务器...

    ubuntu?linux命令行简明教程_ubuntu教程_linux_zip_

    linux命令行简明教程.zip"文件包含了关于在Ubuntu Linux中使用命令行的基本知识,特别强调了与zip文件相关的操作。下面将详细解释这些知识点。 1. **Linux命令行基础**: - **终端启动**:在Ubuntu中,可以通过...

    ubunt---linux命令行简明教程--

    通过编写Shell脚本,可以自动化执行一系列命令,提高工作效率。基本语法包括变量、条件语句、循环结构等。 总结,Ubuntu Linux命令行简明教程涵盖了Linux操作系统的基础知识和常用命令,是学习和提升Linux技能的...

    Linux命令行大全中文版(CHM格式)

    Linux命令行是Linux操作系统的核心部分,它允许用户通过文本接口与系统进行交互,执行各种操作。这份"Linux命令行大全中文版"是一个极其宝贵的资源,为学习和掌握Linux提供了全面的指南。CHM(Compiled HTML Help)...

    linux命令行手册

    在学习Linux的过程中,掌握命令行是基础,也是深入学习Linux系统管理和自动化脚本编写的重要工具。本手册内容丰富,涵盖了从Linux命令行的基本使用到系统管理的高级技巧,适合Linux新手作为入门指南。 首先,手册从...

    Linux命令行大全中文版(CHM格式).rar

    Linux命令行是Linux系统中最基本且强大的交互方式,通过键盘输入命令来执行各种操作,如文件管理、系统控制、网络通信等。学习Linux命令行能够极大地提高工作效率,尤其对于系统管理员和开发者而言更是必备技能。这...

    Putty Linux系统命令行工具

    正确输入后,即可进入Linux命令行界面。 5. **执行命令**:现在,你可以像在本地终端一样,使用各种Linux命令进行系统管理和操作。 了解基本使用方法后,学习常见的Linux命令是必不可少的。例如: - `ls`:列出目录...

    Linux命令行大全中文版

    2. **文件和目录操作**:`cat`查看文件内容,`more`或`less`分页浏览文件,`find`在指定目录下搜索文件,`grep`在文件中搜索特定文本,`du`查看文件和目录的大小,`sudo`以管理员权限运行命令。 3. **文本处理**:`...

    Linux命令行完全技术宝典

    "Linux命令行完全技术宝典"是一份全面介绍Linux命令行操作的资源,旨在帮助读者深入理解和掌握在Linux环境中工作所需的关键技能。这份资料涵盖了从基础命令到高级脚本编写,将帮助你提升在Linux终端中的效率。 首先...

    linux-emojify命令行中的Emoji

    Linux开发中的`emojify`命令是一个非常有趣的工具,它允许用户在命令行环境中使用和处理 Emoji。在当今数字化的世界中,Emoji 已经成为沟通和表达情感的重要元素,不仅在社交媒体和聊天应用中广泛使用,现在也逐渐...

    linux命令行elasticsearch查询工具es2unix

    es2unix作为Linux命令行下的Elasticsearch查询工具,极大地提高了数据检索和处理的效率。通过熟练掌握es2unix以及与其配合使用的Unix命令,你可以轻松实现对Elasticsearch中的大数据进行快速分析和操作,这对于日常...

    Vmware虚拟机Linux系统由桌面模式改成命令行模式登入

    而在命令行模式下,所有操作均需通过键盘输入指令完成,虽然对初学者来说可能不够友好,但其高效性、灵活性以及对系统资源的低需求使其成为高级用户和自动化脚本的理想选择。 ### 在Vmware虚拟机中切换Linux模式...

    Linux 使用脚本安装MySQL数据库

    脚本执行过程中可能会遇到权限问题,特别是当需要交互输入(如设置MySQL root用户的密码)时。这时可以使用`expect`工具模拟用户输入,或者在安全安装脚本中指定默认值。 除了基本的安装,你还可以扩展脚本,例如,...

    linux命令行指令大全

    本文档《Linux命令行指令大全》全面概述了各种常用和不那么常用的Linux命令,旨在帮助用户更好地理解和掌握Linux环境中的操作。 1. **基础命令**: - `ls`:列出目录内容,通过`-l`选项可以显示详细信息。 - `cd`...

    Ubuntu Linux命令行简明教程

    这个“Ubuntu Linux命令行简明教程”旨在帮助初学者熟悉这个强大的工具,了解如何通过命令行来执行任务,提升效率。 1. **命令行基础** - **终端启动**: 在Ubuntu中,可以通过键盘快捷键`Ctrl`+`Alt`+`T`打开终端...

Global site tag (gtag.js) - Google Analytics