欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本實(shí)現(xiàn)自動(dòng)輸入密碼登錄服務(wù)器

 更新時(shí)間:2015年03月17日 09:35:17   投稿:junjie  
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)自動(dòng)輸入密碼登錄服務(wù)器,本文使用expect來(lái)實(shí)現(xiàn)這個(gè)需求,講解了expect的安裝及使用腳本,需要的朋友可以參考下

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

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

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

安裝
CentOS下安裝命令很簡(jiǎn)單,如下

復(fù)制代碼 代碼如下:

sudo yum install expect 

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

brew install expect 

測(cè)試腳本
我們寫一個(gè)簡(jiǎn)單的腳本實(shí)現(xiàn)scp拷貝文件,在腳本里配置密碼,保存為scp.exp如下

復(fù)制代碼 代碼如下:

#!/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,而這里是你機(jī)器上expect程序的路徑,說(shuō)明這段腳本是由expect來(lái)解釋執(zhí)行的,而不是由bash解釋執(zhí)行,所以代碼的語(yǔ)法和shell腳本也是不一樣的,其中set passwd your_passwd設(shè)置成你自己的密碼,然后執(zhí)行如下命令

復(fù)制代碼 代碼如下:

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

執(zhí)行前確保scp.exp有執(zhí)行權(quán)限,第一個(gè)參數(shù)為你本地文件,第二個(gè)為遠(yuǎn)程主機(jī)的目錄,運(yùn)行腳本如果報(bào)錯(cuò)“connect is timeout”,可以把超時(shí)設(shè)長(zhǎng)一點(diǎn),第二行set timeout 20可以設(shè)置超時(shí)時(shí)間,單位是秒。腳本執(zhí)行效果如下

還能做什么

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

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

相關(guān)文章

  • Linux中根據(jù)一個(gè)單詞快速鎖定到日志的操作命令

    Linux中根據(jù)一個(gè)單詞快速鎖定到日志的操作命令

    這篇文章給大家介紹了Linux中如何根據(jù)一個(gè)單詞快速鎖定到日志,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Linux Shell簡(jiǎn)介

    Linux Shell簡(jiǎn)介

    本文編譯整理時(shí)對(duì)相關(guān)章節(jié)做了相應(yīng)的刪改處理,去掉了針對(duì)Mandrake Linux的部分內(nèi)容
    2013-06-06
  • 如何查看Linux提供的Shell解析器

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

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

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

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

    shell腳本echo輸出不換行功能增強(qiáng)實(shí)例

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

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

    Linux系統(tǒng)中,管理員經(jīng)常需要通過(guò)一個(gè)無(wú)法登錄shell的系統(tǒng)用戶來(lái)執(zhí)行特定的命令,這種需求在管理多用戶系統(tǒng)或自動(dòng)化任務(wù)時(shí)尤為常見,下面,我們將詳細(xì)講解如何實(shí)現(xiàn)這一需求,并深入分析其背后的原理,需要的朋友可以參考下
    2024-01-01
  • 詳解 linux mysqldump 導(dǎo)出數(shù)據(jù)庫(kù)、數(shù)據(jù)、表結(jié)構(gòu)

    詳解 linux mysqldump 導(dǎo)出數(shù)據(jù)庫(kù)、數(shù)據(jù)、表結(jié)構(gòu)

    這篇文章主要介紹了詳解 linux mysqldump 導(dǎo)出數(shù)據(jù)庫(kù)、數(shù)據(jù)、表結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Linux 中fork的執(zhí)行的實(shí)例詳解

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

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

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

    下面小編就為大家?guī)?lái)一篇linux 查找大目錄和大文件的方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Linux啟動(dòng)新進(jìn)程的幾種方法及比較

    Linux啟動(dòng)新進(jìn)程的幾種方法及比較

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

最新評(píng)論