歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Mac OS SSH/SFTP的Python腳本

以前在windows系統下面使用xshell來管理阿裡雲上的服務器,winscp來上傳網站的資料,由於winscp使用的私鑰必須是.ppk格式,而xshell使用普通的私鑰,每次都要用putty工具來轉換,很麻煩。後來使用xftp來替代winscp,xftp和xshell使用同樣的私鑰,這套組合在windows平台上面管理服務器非常方便,推薦使用。

然而Mac OS上面,沒有這個套工具,由於Terminal可以直接使用sftp和ssh命令,用來管理阿裡雲服務器也很不錯。但是,管理多態服務器非常麻煩,最好腳本統一管理。因此我設計的腳本具有如下功能:

同一個命令可以用於ssh連接或者sftp連接 一個腳本最好能管理所有的服務器 腳本能夠展示所有可用的服務器,方便選擇 要有良好的幫助信息

最終的命令格式如下:

sshlink -l展示所有可以用的服務器名 sshlink -h或者sshlink --help顯示幫助信息 sshlink -s server_name表示使用ssh協議連接服務器 sshlink -f server_name表示使用sftp協議連接服務器

代碼如下,注意:代碼中隱藏了關鍵的IP信息,請自行修改:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

"""
作用:'sshlink -[lsfh] severName'命令對服務器進行訪問
arg參數如下:
-l: 顯示可用的服務器名字
-s: 使用ssh命令進行連接服務器
-f: 使用sftp命令進行連接服務器
-h: 顯示幫助信息
--help: 顯示幫助信息
"""

import sys
import os

argv = sys.argv
BASE_URL = '/Users/HomePath/.ssh/'      # 存放私鑰的路徑

serverName = {
    'server1': ('ip1', 'server1.key'),
    'server2': ('ip2', 'server2.key'),
}

def sshlink():
    if len(argv) == 1:    # 沒有參數的時候顯示幫助信息
        print __doc__
    elif argv[1] == '-l':    # 顯示所有的可用服務器名
        print 'Servers can be used: ', ' '.join(serverName.keys())
    elif argv[1] == '-s':    # 使用ssh進行連接
        if len(argv) == 3 and argv[2] and argv[2] in serverName:
            sshcmd = list()
            sshcmd.append('ssh root@' + serverName[argv[2]][0])
            sshcmd.append('-i')
            sshcmd.append(os.path.join(BASE_URL, serverName[argv[2]][1]))
            os.system(' '.join(sshcmd))
        else:
            print "Need Server Name: ", ' '.join(serverName.keys())
    elif argv[1] == '-f':    #使用sftp進行連接
        if len(argv) == 3 and argv[2] and argv[2] in serverName:
            sftpcmd = list()
            sftpcmd.append('sftp -i')
            sftpcmd.append(os.path.join(BASE_URL, serverName[argv[2]][1]))
            sftpcmd.append('root@' + serverName[argv[2]][0])
            os.system(' '.join(sftpcmd))
        else:
            print "Need Server Name: ", ' '.join(serverName.keys())
    elif argv[1] == '--help' or argv[1] == '-h':
        print __doc__
        print "Servers can be used: ", ' '.join(serverName.keys())
    else:
        print "Only support -l, -s, -f, --help"

if __name__ == '__main__':
    sshlink()

使用sudo ln -s在系統路徑中建立一個軟連接,並且賦予執行權限sudo chmod 700 sshlink,然後就可以正常使用命令了。如果需要增加服務器,那麼就修改該代碼中的ServerName字典,然後就能正常使用。

Copyright © Linux教程網 All Rights Reserved