美文网首页效率程序员
Mac OS SSH/SFTP的Python脚本

Mac OS SSH/SFTP的Python脚本

作者: 七夜堂 | 来源:发表于2016-05-24 23:14 被阅读420次

    以前在windows系统下面使用xshell来管理阿里云上的服务器,winscp来上传网站的资料,由于winscp使用的私钥必须是.ppk格式,而xshell使用普通的私钥,每次都要用putty工具来转换,很麻烦。后来使用xftp来替代winscp,xftp和xshell使用同样的私钥,这套组合在windows平台上面管理服务器非常方便,推荐使用。

    然而Mac OS上面,没有这个套工具,由于Terminal可以直接使用sftp和ssh命令,用来管理阿里云服务器也很不错。但是,管理多台服务器非常麻烦,最好脚本统一管理。因此我设计的脚本具有如下功能:

    1. 同一个命令可以用于ssh连接或者sftp连接
    2. 一个脚本最好能管理所有的服务器
    3. 脚本能够展示所有可用的服务器,方便选择
    4. 要有良好的帮助信息

    最终的命令格式如下:

    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字典,然后就能正常使用。

    相关文章

      网友评论

        本文标题:Mac OS SSH/SFTP的Python脚本

        本文链接:https://www.haomeiwen.com/subject/lzozrttx.html