Linux無密碼登陸及命令應答交互

一元暴、Linux無密碼登陸

  • a.通過設置KEY登陸(推薦)
    生成密鑰:ssh-keygen
    安裝密鑰到遠程主機:ssh-copy-id 用戶名@主機地址
    注意:ssh-copy-id 將key寫到遠程機器的 ~/.ssh/authorized_key 文件中淋硝。

  • b.使用sshpass命令(需安裝):
    sshpass -p "ssh密碼" ssh 用戶名@主機地址

  • c.使用plink工具連接(windows):
    plink.exe -pw "ssh密碼" ssh 用戶名@主機地址

二、Linux命令應答命令expect(需安裝)

  • 1.expect簡介
    expect 是用來進行自動化控制和測試的工具廓脆。主要是和交互式軟件 telnet ftp passwd fsck rlogin ssh tip 等進行自動化的交互。

  • 2.expect關鍵命令

    send       //向進程發(fā)送字符串模擬用戶的輸入,注意一定要加 \r 回車  
    expect     //從進程接收字符串     
    spawn      //啟動進程(由spawn啟動的進程的輸出可以被expect所捕獲)     
    interact   //用戶交互     
    
  • 3.expect使用
    單一分支語法:

    expect "hello" {send "you said hello"}
    

    當輸出中包含hello后郭脂,輸出you said hello
    多分支模式語法:

    expect {
          "lilei" {send "hello lilei"; exp_continue}
          "hanmeimei" {send "hello hanmeimei"; exp_continue}
          "how do you do ?" {send "how do you do"}
    }
    

    命令說明:
    當輸出中包含lilei時 輸出hello lilei,同時循環(huán)此多分支語句糠馆。
    當輸出中包含hanmeimei時 輸出hello hanmeimei,同時循環(huán)此多分支語句除嘹。
    當輸出中包含how do you do ?時 輸出dow do you do写半。

  • 4.使用實例

    • 遠程登錄服務器并創(chuàng)建文件夾

      #!/usr/bin/expect 
      set timeout -1
      spawn ssh root@192.168.0.107
      expect {
          "password" {send "123456\r";}
          "yes/no" {send "yes\r";exp_continue}
      }
      expect "root" {send "mkdir test\r"}
      expect eof
      exit
      
    • expect腳本獲取參數(shù):

      #!/usr/bin/expect 
      set ip [lindex $argv 0]
      set password [lindex $argv 1]
      set timeout -1
      spawn ssh root@$ip
      expect {
          "password" {send "$password\r";}
          "yes/no" {send "yes\r";exp_continue}
      }
      expect "root" {send "mkdir test1\r"}
      expect "root" {send "mkdir test2\r"}
      send "exit\r" //退出遠程登錄
      expect eof
      exit
      

      ./expect.ex 192.168.0.107 123456

    • 遠程登錄服務器等待手動操作:

      #!/usr/bin/expect 
      set ip [lindex $argv 0]
      set password [lindex $argv 1]
      set timeout -1
      spawn ssh root@$ip
      expect {
          "password" {send "$password\r";}
          "yes/no" {send "yes\r";exp_continue}
      }
      interact
      

      ./expect.ex 192.168.0.107 123456

    • 使用scp傳輸文件:

      #!/usr/bin/expect 
      set timeout -1
      spawn scp test.txt root@192.168.0.107:/home/
      expect {
          "password" {send "123456\r";}
          "yes/no" {send "yes\r";exp_continue}
      }
      expect eof
      exit
      
    • 在本地開啟socks5的代理:

       #!/usr/bin/expect 
       set timeout -1 //expect匹配輸出的超時時間
       spawn ssh -N -D 0.0.0.0:1080 localhost //新建一個進程,執(zhí)行ssh命令
       expect {
          "yes/no" {send "yes\r";exp_continue} //
          "password" {send "123\r"}
       }
       expect eof
       exit
      

      命令說明:
      根據(jù)進程輸出執(zhí)行預先設置好的命令:
      假如輸出包含yes/no尉咕,則表示是第一次登入需要輸入yes來添加信任叠蝇。exp_continue表示繼續(xù)此循環(huán)。
      假如輸出包含password年缎,表示需要輸入密碼悔捶。
      expect eof是在等待結束標志。由spawn啟動的命令在結束時會產(chǎn)生一個eof標記单芜,expect eof即在等待這個標記蜕该,因為ssh -N -D 0.0.0.107:1080 localhost 程序需要一直運行,所以將timeout設置為-1即可無限制的等待洲鸠。

    • 指定登陸機器
      從computerInfo里讀取相應機器信息堂淡,用戶選擇登陸其中一臺機器馋缅。
      computerInfo.txt內(nèi)容:

      #ip port user password description          
      192.168.1.1 root 123456 'first machine'          
      192.168.1.2 root 123456 'second machine'          
      

      core.ex腳本內(nèi)容:

      #!/usr/bin/expect 
      set ip [lindex $argv 0]
      set port [lindex $argv 1]
      set username [lindex $argv 2]
      set password [lindex $argv 3]
      set timeout -1
      spawn ssh -p $port $username@$ip
      expect {
          "password" {send "$password\r";}
          "yes/no" {send "yes\r";exp_continue}
      }
      interact
      

      login.sh腳本內(nèi)容:

      #!/bin/bash
      file="computerInfo.txt"
      #顯示機器信息 過濾第一行和空行
      awk '{if (NR > 1 && $1 != ""){printf "%-2s %-45s %-15s \n",NR")",$5,$1}}' $file 
      echo "please choose which machine to login:"
      read number
      #將信息存入變量
      read ip port user password <<< $(echo `awk 'NR=="'$number'"{print $1,$2,$3,$4}' $file`)
      ./core.ex $ip $port $user $password
      

參考文章:
Linux Expect 簡介和使用實例

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绢淀,隨后出現(xiàn)的幾起案子萤悴,更是在濱河造成了極大的恐慌,老刑警劉巖更啄,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稚疹,死亡現(xiàn)場離奇詭異,居然都是意外死亡祭务,警方通過查閱死者的電腦和手機内狗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來义锥,“玉大人柳沙,你說我怎么就攤上這事“璞叮” “怎么了赂鲤?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柱恤。 經(jīng)常有香客問我数初,道長,這世上最難降的妖魔是什么梗顺? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任泡孩,我火速辦了婚禮,結果婚禮上寺谤,老公的妹妹穿的比我還像新娘仑鸥。我一直安慰自己,他們只是感情好变屁,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布眼俊。 她就那樣靜靜地躺著,像睡著了一般粟关。 火紅的嫁衣襯著肌膚如雪疮胖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天闷板,我揣著相機與錄音获列,去河邊找鬼。 笑死蛔垢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的迫悠。 我是一名探鬼主播鹏漆,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艺玲?” 一聲冷哼從身側響起括蝠,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饭聚,沒想到半個月后忌警,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡秒梳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年法绵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酪碘。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡朋譬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兴垦,到底是詐尸還是另有隱情徙赢,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布探越,位于F島的核電站狡赐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏钦幔。R本人自食惡果不足惜枕屉,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望节槐。 院中可真熱鬧搀庶,春花似錦、人聲如沸铜异。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揍庄。三九已至咆蒿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚂子,已是汗流浹背沃测。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留食茎,地道東北人蒂破。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像别渔,于是被迫代替她去往敵國和親附迷。 傳聞我的和親對象是個殘疾皇子惧互,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容