佳木斯湛栽影视文化发展公司

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

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

熱門標(biāo)簽:Linux服務(wù)器 鐵路電話系統(tǒng) 百度競(jìng)價(jià)排名 地方門戶網(wǎng)站 AI電銷 呼叫中心市場(chǎng)需求 服務(wù)外包 網(wǎng)站排名優(yōu)化

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

那么問題來了,在腳本自動(dòng)化執(zhí)行的時(shí)候需要輸入密碼怎么辦?比如你的腳本里有一條scp語句,總不能在腳本執(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)偏離了今天主題的本意,今天要說的是在腳本里自動(dòng)輸入密碼,我們可以想象下,更優(yōu)雅的方式應(yīng)該是在腳本里自己配置密碼,當(dāng)屏幕交互需要輸入時(shí)自動(dòng)輸入進(jìn)去,要達(dá)到這樣的效果就需要用到expect。

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

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

sudo yum install expect 

至于Mac用戶,可以通過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程序的路徑,說明這段腳本是由expect來解釋執(zhí)行的,而不是由bash解釋執(zhí)行,所以代碼的語法和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è)長一點(diǎn),第二行set timeout 20可以設(shè)置超時(shí)時(shí)間,單位是秒。腳本執(zhí)行效果如下

還能做什么

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

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

您可能感興趣的文章:
  • Shell腳本中實(shí)現(xiàn)把輸入的密碼轉(zhuǎn)換為*(星號(hào))的方法
  • PowerShell批量修改AD用戶密碼屬性的代碼
  • shell腳本實(shí)現(xiàn)隨機(jī)生成10個(gè)8位密碼
  • PowerShell中實(shí)現(xiàn)混淆密碼示例
  • Shell腳本中非交互式修改密碼的兩種方法
  • Shell創(chuàng)建用戶并生成隨機(jī)密碼腳本分享
  • shell腳本實(shí)現(xiàn)輸入密碼顯示星號(hào)

標(biāo)簽:銅川 湖南 湘潭 仙桃 崇左 衡水 黃山 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell腳本實(shí)現(xiàn)自動(dòng)輸入密碼登錄服務(wù)器》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    女性| 阿拉善盟| 玉门市| 东阿县| 乐业县| 綦江县| 宁都县| 沾化县| 遵化市| 龙州县| 高青县| 高尔夫| 固镇县| 化州市| 哈密市| 北安市| 勃利县| 汤原县| 德阳市| 曲水县| 军事| 涞水县| 伊川县| 樟树市| 宜章县| 内江市| 深圳市| 南阳市| 多伦县| 舟曲县| 陇南市| 平利县| 太白县| 广昌县| 民和| 封丘县| 沙湾县| 秦皇岛市| 上蔡县| 远安县| 于都县|