亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Shell腳本實現自動輸入密碼登錄服務器

 更新時間:2015年03月17日 09:35:17   投稿:junjie  
這篇文章主要介紹了Shell腳本實現自動輸入密碼登錄服務器,本文使用expect來實現這個需求,講解了expect的安裝及使用腳本,需要的朋友可以參考下

使用Linux的程序員對輸入密碼這個舉動一定不陌生,在Linux下對用戶有嚴格的權限限制,干很多事情越過了權限就得輸入密碼,比如使用超級用戶執(zhí)行命令,又比如ftp、ssh連接遠程主機等等,如下圖:

那么問題來了,在腳本自動化執(zhí)行的時候需要輸入密碼怎么辦?比如你的腳本里有一條scp語句,總不能在腳本執(zhí)行到這一句時手動輸入密碼吧。

針對于ssh或scp命令,可能有人會回答是建立信任關系,關于建立ssh信任關系的方法請自行百度Google,只需要兩行簡單的命令即可搞定,但這并不是常規(guī)的解決方案,如果是ftp連接就沒轍了,況且,你不可能為了執(zhí)行某些命令去給每個你要連接的主機都手動建立ssh信任,這已經偏離了今天主題的本意,今天要說的是在腳本里自動輸入密碼,我們可以想象下,更優(yōu)雅的方式應該是在腳本里自己配置密碼,當屏幕交互需要輸入時自動輸入進去,要達到這樣的效果就需要用到expect。

安裝
CentOS下安裝命令很簡單,如下

復制代碼 代碼如下:

sudo yum install expect 

至于Mac用戶,可以通過homebrew安裝(需要先安裝homebrew,請自行Google)
復制代碼 代碼如下:

brew install expect 

測試腳本
我們寫一個簡單的腳本實現scp拷貝文件,在腳本里配置密碼,保存為scp.exp如下

復制代碼 代碼如下:

#!/usr/bin/expect 
set timeout 20 
 
if { [llength $argv] < 2} { 
    puts "Usage:" 
    puts "$argv0 local_file remote_path" 
    exit 1 

 
set local_file [lindex $argv 0] 
set remote_path [lindex $argv 1] 
set passwd your_passwd 
 
set passwderror 0 
 
spawn scp $local_file $remote_path 
 
expect { 
    "*assword:*" { 
        if { $passwderror == 1 } { 
        puts "passwd is error" 
        exit 2 
        } 
        set timeout 1000 
        set passwderror 1 
        send "$passwd\r" 
        exp_continue 
    } 
    "*es/no)?*" { 
        send "yes\r" 
        exp_continue 
    } 
    timeout { 
        puts "connect is timeout" 
        exit 3 
    } 

注意,第一行很重要,通常我們的腳本里第一行是#!/bin/bash,而這里是你機器上expect程序的路徑,說明這段腳本是由expect來解釋執(zhí)行的,而不是由bash解釋執(zhí)行,所以代碼的語法和shell腳本也是不一樣的,其中set passwd your_passwd設置成你自己的密碼,然后執(zhí)行如下命令

復制代碼 代碼如下:

./scp.exp ./local_file user@host:/xx/yy/ 

執(zhí)行前確保scp.exp有執(zhí)行權限,第一個參數為你本地文件,第二個為遠程主機的目錄,運行腳本如果報錯“connect is timeout”,可以把超時設長一點,第二行set timeout 20可以設置超時時間,單位是秒。腳本執(zhí)行效果如下

還能做什么

細心的同學一定發(fā)現了,其實expect提供的是和終端的一種交互機制,輸入密碼只是其中一種應用形式,只要是在終端阻塞需要輸入時,都可以通過expect腳本完成自動輸入,比如前面腳本里配置了兩種交互場景,一種是終端提示"password:"時輸入密碼,還有一種是提示"yes/no)?"時輸入“yes”,如果和遠程主機是第一次建立連接,執(zhí)行scp.exp腳本效果是這樣的

所以我們可以根據終端的提示來配置輸入命令,這樣就能達到了自動化的效果。至于處理其它交互場景,只需要照著上面的腳本依葫蘆畫瓢就行了

相關文章

  • Linux中根據一個單詞快速鎖定到日志的操作命令

    Linux中根據一個單詞快速鎖定到日志的操作命令

    這篇文章給大家介紹了Linux中如何根據一個單詞快速鎖定到日志,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Linux Shell簡介

    Linux Shell簡介

    本文編譯整理時對相關章節(jié)做了相應的刪改處理,去掉了針對Mandrake Linux的部分內容
    2013-06-06
  • 如何查看Linux提供的Shell解析器

    如何查看Linux提供的Shell解析器

    這篇文章主要介紹了查看Linux提供的Shell解析器的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • linux echo命令以及l(fā)inux echo命令提示權限不夠的解決辦法

    linux echo命令以及l(fā)inux echo命令提示權限不夠的解決辦法

    linux的echo命令, 在shell編程中極為常用, 在終端下打印變量value的時候也是常常用到的, 因此有必要了解下echo的用法。下面通過本文給大家介紹linux echo命令以及l(fā)inux echo命令提示權限不夠的解決辦法,感興趣的朋友一起看看吧
    2017-09-09
  • shell腳本echo輸出不換行功能增強實例

    shell腳本echo輸出不換行功能增強實例

    這個腳本很簡單,就是可以用3種不同的函數(方法)來實現,輸出后不換行
    2016-08-08
  • Linux中實現非登錄系統(tǒng)用戶執(zhí)行命令的方法

    Linux中實現非登錄系統(tǒng)用戶執(zhí)行命令的方法

    Linux系統(tǒng)中,管理員經常需要通過一個無法登錄shell的系統(tǒng)用戶來執(zhí)行特定的命令,這種需求在管理多用戶系統(tǒng)或自動化任務時尤為常見,下面,我們將詳細講解如何實現這一需求,并深入分析其背后的原理,需要的朋友可以參考下
    2024-01-01
  • 詳解 linux mysqldump 導出數據庫、數據、表結構

    詳解 linux mysqldump 導出數據庫、數據、表結構

    這篇文章主要介紹了詳解 linux mysqldump 導出數據庫、數據、表結構的相關資料,需要的朋友可以參考下
    2017-05-05
  • Linux 中fork的執(zhí)行的實例詳解

    Linux 中fork的執(zhí)行的實例詳解

    這篇文章主要介紹了Linux 中fork的執(zhí)行的實例詳解的相關資料,需要的朋友可以參考下
    2017-07-07
  • linux 查找大目錄和大文件的方法(推薦)

    linux 查找大目錄和大文件的方法(推薦)

    下面小編就為大家?guī)硪黄猯inux 查找大目錄和大文件的方法(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Linux啟動新進程的幾種方法及比較

    Linux啟動新進程的幾種方法及比較

    有時候,我們需要在自己的程序(進程)中啟動另一個程序(進程)來幫助我們完成一些工作,那么我們需要怎么才能在自己的進程中啟動其他的進程呢?在Linux中提供了不少的方法來實現這一點,下面就來介紹一個這些方法及它們之間的區(qū)別。
    2017-04-04

最新評論