自動Telnet遠程登陸命令


    有些時候,在面對開發機的時候,不斷的telnet和不斷的command自己的命令確實非常麻煩,需要一些自動測試或者自動部署的需求。然而面對telnet很多同學都跟我一樣一開始覺得無法通過管道等傳用戶名和密碼給telnet進行自動化執行。但其實還是有解決辦法的,目前解決辦法大致分一共有兩種,一種是用第三方的expect這個命令,它可以交互式的根據終端返回的信息可以在你事先設定好的游戲規則之下進行命令,比如expect "Hello", send "Hello, too",表示當終端返回Hello的時候我就返回Hello,too,不然就用其中的set timeout進行超時等待。具體的用法同學可以參考相關細節,總之,expect絕對是服務器管理員的利器,如果你有空,確實可以抽空好好學習一下這個命令。但麻煩的就是它不是系統標配的,需要后期安裝。

    第二種方法比較簡單,有些同學可能會跟我一樣,想着兼容性方面,比如我這個腳本有可能會給我團隊的隊友一起使用,難道要求他們都去裝expect嗎?有沒有簡單的辦法可以讓shell來幫我們進行telnet並自動執行一些簡單的命令呢?答案是有的,那就是利用管道,echo,telnet的三者結合,先看以下demo.

#!/bin/bash
#==============================================
# Author: Ricky.K
# Description: Auto telnet and run command
#==============================================   
echo "My own command..." &&
(sleep 1; echo "user"; \
 sleep 1; echo "password"; \
 sleep 1; echo "cd /usr/local"; \
 sleep 1; echo "./test.sh"; \
 while [[ true ]]; do \
     sleep 1; \
 done;) | telnet 192.168.1.1

可以看到,在輸入完自己命令之后,可以通過小括號(用大括號需要注意左邊第一個括號和第一個命令有一個空格)將命令包起來,這樣整個的管道就是對其中各個命令的全部起作用,利用echo,將用戶名,密碼,以及你要輸入的命令通過管道傳給telnet,即實現了自動化的telnet腳本命令實現。同時需要注意,在最后一個命令(非sleep)之前,如果直接傳給telnent,你會發現命令根本就沒有執行完或者壓根就沒執行就被你斷開鏈接了,這個時候你需要用while循環或者sleep一個比較大的值來讓它有時間進行命令響應,這也是需要考慮的。

    telnet自動化並沒有我們想的這么復雜,用用簡單命令一樣可以實現這些功能,也反應了UNIX經典的設計哲學,通過管道和命令組裝,你就擁有了世界上最好的武器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM