<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          利用expect,提升小小的幸福感

          共 2970字,需瀏覽 6分鐘

           ·

          2021-05-13 21:42

          點(diǎn)擊上方 前端瓶子君,關(guān)注公眾號(hào)

          回復(fù)算法,加入前端編程面試算法每日一題群

          本文首發(fā)于:github.com/bigo-fronte… 歡迎關(guān)注、轉(zhuǎn)載。

          ??利用expect,提升小小的幸福感

          筆者經(jīng)常要使用公司跳板機(jī),登陸到目標(biāo)服務(wù)器,查看日志等操作。要重復(fù)的復(fù)制ssh命令、ip地址等。每天來(lái)回的重復(fù),是否有工具能夠讓重復(fù)的事情機(jī)器做呢?

          經(jīng)過(guò)翻閱資料,找到了一個(gè)很好的解決方案,基于expect,實(shí)現(xiàn)ssh自動(dòng)交互。

          使用expect后,自動(dòng)幫我們連接服務(wù)器,輸入密碼,交互輸入令牌驗(yàn)證碼,跳轉(zhuǎn)目標(biāo)ip,一鍵登錄。

          如果要批量登錄機(jī)器,是不是一下子效率就提升上來(lái)了。??????

          什么是expect

          expect是一個(gè)用來(lái)處理交互的命令。借助expect,我們可以將交互過(guò)程寫(xiě)在一個(gè)腳本上,使之自動(dòng)化完成。譬如ssh登錄,ftp登錄等場(chǎng)景。

          四個(gè)命令

          expect中最關(guān)鍵的四個(gè)命令是send,expect,spawn,interact

          • send:用于向進(jìn)程發(fā)送字符串
          • expect:從進(jìn)程接收字符串
          • spawn:?jiǎn)?dòng)新的進(jìn)程
          • interact:允許用戶交互

          send命令

          send命令接收一個(gè)字符串參數(shù),并將該參數(shù)發(fā)送到進(jìn)程。

          expect1.1> send "hello world\n"
          hello world
          復(fù)制代碼

          expect命令

          expect命令和send命令正好相反,expect通常是用來(lái)等待一個(gè)進(jìn)程的反饋。expect可以接收一個(gè)字符串參數(shù),也可以接收正則表達(dá)式參數(shù)。和上文的send命令結(jié)合,現(xiàn)在我們可以看一個(gè)最簡(jiǎn)單的交互式的例子:

          expect "hi\n"
          send "hello there!\n"

          這兩行代碼的意思是:從標(biāo)準(zhǔn)輸入中等到hi和換行鍵后,向標(biāo)準(zhǔn)輸出輸出hello there。
          復(fù)制代碼

          spawn命令

          上文的所有demo都是和標(biāo)準(zhǔn)輸入輸出進(jìn)行交互,但是我們跟希望他可以和某一個(gè)進(jìn)程進(jìn)行交互。spawm命令就是用來(lái)啟動(dòng)新的進(jìn)程的。spawn后的send和expect命令都是和spawn打開(kāi)的進(jìn)程進(jìn)行交互的。結(jié)合上文的send和expect命令我們可以看一下更復(fù)雜的程序段了。

          #!/usr/bin/expect -f
          set password 123
          set timeout -1
           
          spawn ssh -p 26890 [email protected]
          expect "*passphrase*"
          send "$password\r"
          interact
          expect eof

          這段代碼的作用是登錄到跳板機(jī),匹配到進(jìn)程返回的passphrase關(guān)鍵字,然后自動(dòng)輸入密碼。
          復(fù)制代碼

          interact

          到現(xiàn)在為止,我們已經(jīng)可以結(jié)合spawn、expect、send自動(dòng)化的完成很多任務(wù)了。但是,如何讓人在適當(dāng)?shù)臅r(shí)候干預(yù)這個(gè)過(guò)程了。比如自動(dòng)輸入跳板機(jī)密碼后,還需要用戶手動(dòng)輸入令牌驗(yàn)證碼,才能登錄成功。interact就是等待用戶輸入,實(shí)現(xiàn)人機(jī)交互。

          #!/usr/bin/expect -f
          set password 123
          set timeout -1
           
          spawn ssh -p 26890 [email protected]
          expect "*passphrase*"
          send "$password\r"
          interact
          expect eof
          復(fù)制代碼

          實(shí)踐

          好了,簡(jiǎn)單了解expect的用法后,我們就可以上手了。ssh操作,自然離不開(kāi)max終端神器:iterm2

          1.新建jump.sh

          vim /Users/iterm2/jump.sh

          #!/usr/bin/expect -f
          set password 123
          set timeout -1
           
          spawn ssh -p 26890 [email protected]
          expect "*passphrase*"
          send "$password\r"
          interact
          expect eof
          復(fù)制代碼

          2.新增登錄跳板機(jī)指令

          路徑:iterm2 => Preferences => Profiles

          企業(yè)微信[email protected]

          3.新建文件

          #!/usr/bin/expect -f
          set password 123
          set remoteip 127.0.0.2
          set timeout -1
           
          spawn ssh -p 26890 [email protected]
          expect "*passphrase*"
          send "$password\r"
          expect "*20190802*"
          send "go $remoteip\r"
          expect "*passphrase*"
          send "$password\r"
          interact
          expect eof
          復(fù)制代碼

          4.新增登錄目標(biāo)服務(wù)器指令

          同上

          結(jié)語(yǔ)

          一鍵三連的感覺(jué)真香,是不是提升了小小的幸福感!有其他方法也歡迎留言交流,或者補(bǔ)充windows的使用方法。

          歡迎大家留言討論,祝工作順利、生活愉快!

          最后

          歡迎關(guān)注【前端瓶子君】??ヽ(°▽°)ノ?
          回復(fù)「算法」,加入前端編程源碼算法群,每日一道面試題(工作日),第二天瓶子君都會(huì)很認(rèn)真的解答喲!
          回復(fù)「交流」,吹吹水、聊聊技術(shù)、吐吐槽!
          回復(fù)「閱讀」,每日刷刷高質(zhì)量好文!
          如果這篇文章對(duì)你有幫助,在看」是最大的支持
          》》面試官也在看的算法資料《《
          “在看和轉(zhuǎn)發(fā)”就是最大的支持


          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  69自拍视频 | 尤物视频网 | 77777在线视频 | 黄色成人网站在线观看 | gogo高清无码视频 |