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放在环境变量中

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