macOS Mojave(配置篇):使用iTerm2 Profiles快捷登錄ssh(自動連接遠程服務器)

用了整整一週MacBook Pro了,一個字 好用,真香。

前幾天把,參考《iTerm2 + Oh My Zsh 打造舒適終端體驗》把iTerm2裝完了,今天想找個服務器開始敲命令了。

檢查版本

檢查是否安裝好(顯示安裝好的版本號就是已經安裝好了)

➜  bin expect -v
expect version 5.45

填寫iTerm2的配置文件

首先找到 iTerm2,然後選擇 Preferences,點擊+ 添加新的General配置,配置基礎Name,如有需要可以添加一個新的Tags,然後在Commond中,找一個可以 expect的文件夾下的任意一個文件,隨便任意指定。

在指定文件夾下面創建新建的配置文件

  • 新建文件夾
cd ~

mkdir .ssh/akina
  • 新建配置文件
touch yunqi
  • 配置文件中添加一下內容
#!/usr/bin/expect -d 
set host 192.168.100.119(服務器ip地址)
set user root(登錄服務器的用戶名)
set password admin(登錄服務器的密碼)

spawn ssh $user@$host
expect "*password:*"
send "$password\r"
interact

簡單在這記錄下下面會用到的一些命令

  set timeout           #設置超時時間,默認超時時間10s.

  spawn shell command   # spawn後面接的是我們要執行的shell命令

  expect "hi"        #匹配輸出內容“hi”

  {send “hello\r”}                    # 匹配到內容''hi"後輸出“hello”,“\r”是代表是返回字符。

  interact             #執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。如果你只是登錄過去執行一段命令就退出,可改爲[expect eof] 

此時已經配好了,可以自動連接

第一種方式

能看到新的配置,就說明配置完畢,直接點擊就可以自動連接了。

第二種方式

終端界面,直接右鍵,New Tab 選中即可~

第三種方式

快捷鍵操作,command+o ,選擇你設定的Profile即可。

其他expect腳本示例

簡單更改密碼腳本

[root@localhost shell]# cat password.exp
#!/usr/bin/expect -d                  #"#!/usr/bin/expect"這一行告訴操作系統腳本里的代碼使用那一個shell來執行。 -d 啓用調試模式(可加可不加)。
set timeout 30                #設置超時時間爲30s
spawn passwd user5            #spawn是進入expect環境後纔可以執行的expect內部命令,如果沒有裝expect或者直接在默認的SHELL下執行是找不到spawn命令的。所以不要用 “which spawn“之類的命令去找spawn命令。好比windows裏的dir就是一個內部命令,這個命令由shell自帶,你無法找到一個dir.com 或 dir.exe 的可執行文件。它主要的功能是給ssh運行進程加個殼,用來傳遞交互指令。
expect "New password:" {send "123456\r" } #這個命令的意思是判斷上次輸出結果裏是否包含“New password:”的字符串,如果有則立即返回"123456","\r"代表是返回字符,否則就等待一段時間後返回,這裏等待時長就是前面設置的30秒 。
expect "new password:" {send "123456\r"}  #在平常我們設置密碼的時候會讓我輸入一次後再輸入一次進行確認,這個是匹配第二次輸出,然後再次輸入密碼。
expect eof                #表示讀取到文件結束符

登陸遠程服務器並停留在遠程服務器上

[root@localhost shell]# cat login.exp 
#!/usr/bin/expect
spawn ssh 192.168.123.218   #ssh 遠程登陸
expect {
"*yes/no" {send "yes\r";exp_continue} #匹配輸出內容,返回內容,exp_continue表示繼續執行下一步
"*password" {send "123456\r"}
}
interact #執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。如果你只是登錄過去執行一段命令就退出,可改爲[expect eof]

傳輸參數執行登陸

[root@localhost shell]# cat  login2.exp 
#!/usr/bin/expect 
set ip [lindex $argv 0]  #這條命令是將變量ip的值設置爲傳入進來的第一個參數。[lindex $argv 0]表示的就是第一個參數的值
set port [lindex $argv 1] #這條命令是將變量port的值設置爲傳入進來的第二個參數。[lindex $argv 1]表示的就是第二個參數的值
set passwd "123456"
spawn ssh $ip -p$port  #使用變量,這裏使用的方法跟shell腳本一樣
expect {
    "yes/no" {send "yes\r";exp_continue}
    "password:" {send "$passwd\r"}
}
interact
[root@localhost shell]# ./login2.exp  192.168.123.218 22 #多個參數直接以空格間隔,第一個參數:192.168.123.218 第二個參數22

You can't get something for nothing.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章