Mac ssh記住ip和密碼

需求

mac的terminal很方便進行遠程ssh鏈接,但是卻每一次?都要輸入密碼,很麻煩,尤其是管理多臺服務器的時候。

所以如果能記住密碼是再好不過了,直接進行連接和登錄。

解決方案

Linux系統是自帶Python 2.7的,Mac OS也不例外,可以在終端中輸入 python -V以查看python的版本

由於Python具有很好的易操作性,所以可以使用Python來實現ssh的快捷登錄。

1.安裝pip

pip是Python的搭檔,用來安裝一些wheels,這裏需要安裝一個由Python寫的一個包 pexpect,Python默認是沒有安裝pip的,需要下載和安裝。安裝也很簡單,首先打開終端,然後依次執行以下命令:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

2.安裝pexpect

安裝好pip後,再安裝pexpect包,用於自動化執行linux命令

pip install pexpect

3.寫腳本

新建一個文件,用來存放ip地址和密碼,命名爲ssh_config.py,寫入一個或者多個服務器配置:

#ssh_config.py
#用於存放ssh連接的配置
host1 = {
    "ip" : "x.x.x.x",
    "port" : "22",
    "user" : "root",
    "pwd" : "12345"
}
host2 = {
    "ip" : "x.x.x.x",
    "port" : "22",
    "user" : "root",
    "pwd" : "12345"
}

再新建第二個文件,命名爲ssh.py:

#coding=utf8
from ssh_config import *
import pexpect, sys

host = locals()[sys.argv[1]]
CONFIG = host

class SSLconnect():
    def __init__(self):
        self.user = CONFIG['user'] + "@" + CONFIG['ip']
        
    def connect(self):
        print "正在連接主機..."
        self.process = pexpect.spawn("ssh", [self.user, "-p", CONFIG["port"]])
        print "OK"
        self.input_pwd()

    def input_pwd(self):
        state = self.process.expect([
            "[p|P]assword:",
            pexpect.TIMEOUT,
            "connecting (yes/no)"
        ])
        self.check_state(state)

    def check_state(self, state):
        if state == 0:
            print "正在驗證密碼..."
            self.__verify_pwd()
            return
        if state == 1:
            print "連接超時,請重新嘗試"
            return
        if state == 2:
            self.__again()
            return

    def __again(self):
        self.process.sendline("yes")
        self.input_pwd()
    
    def __verify_pwd(self):
        self.process.sendline(CONFIG["pwd"])
        state = self.process.expect(["$", "assword"])
        if state == 0:
            print "登錄成功"
            self.process.interact()
        else:
            print "登錄失敗,請檢查密碼重試。"
        
if __name__ == "__main__":
    new_con = SSLconnect()
    new_con.connect()

4.執行

如上配置好之後,就可以快速的實現SSH的登錄了,只需要執行以下命令:

python ssh.py host1#host1終端
python ssh,py host2#host2終端

注意事項

ssh_config.py和ssh.py要放在同一文件夾中,或者將ssh_config.py放在環境變量中

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