栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

SSH一键上传/下载代码

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSH一键上传/下载代码

使用ssh进行代码同步

put_codes.py是在上传代码的电脑用的. get_codes.py是下载代码的电脑用的.

put_codes.py在main函数里面添加了if ".py" in i or ".sh" in i:用来筛选上传文件.

get_codes.py将文件夹里面的所有文件下载下来到本地, 文件夹下的子目录没测试. 一键下载文件这个功能在进行科研中服务器画图经常用到, 画图后直接运行代码就可以同步文件, 大大解放生产力.

github地址:GitHub - frZheng/sshSyncCode: 使用ssh进行代码同步

import paramiko,os,sys

server_dir = r"/tmp/xxx/Book_gym_20220214"  #需要下载远程服务器的目标文件夹路径
local_dir = r"./Book_gym_20220214" #要保存文件的路径

hostname = 'xxx'  #服务器IP地址
username = 'root'     # 登录账号
password = 'xxx'     #登录密码
port = 22

if __name__ == '__main__':


    transport = paramiko.Transport((hostname, port))
    transport.connect(username=username, password=password)

    sftp = paramiko.SFTPClient.from_transport(transport)  # 如果连接需要密钥,则要加上一个参数,hostkey="密钥"

    file_list = os.listdir(local_dir)
    for i in file_list:
        if ".py" in i or ".sh" in i:
            print("put: ",i)
            sftp.put(os.path.join(local_dir,i), server_dir + "/" + i)  # 将本地的Windows.txt文件上传至服务器/root/Windows.txt

    transport.close()  # 关闭连接
import paramiko,os,sys

input_dir = r"/tmp/xxx/Book_gym_20220214"  #需要下载远程服务器的目标文件夹路径
output_dir = r"./Book_gym_20220214" #要保存文件的路径

hostname = 'xxx'  #服务器IP地址
username = 'root'     # 登录账号
password = 'xxx'     #登录密码
port = 22


def list_dir(root):
    cmd = 'ls --file-type '+root
    stdin, stdout, stderr = ssh.exec_command(cmd)
    result = stdout.read()
    return result.decode().split('n')

def save_file(root,name):
    try:
        save_path = output_dir + root.split(input_dir)[-1]
        if not os.path.exists(save_path):
            os.makedirs(save_path)
        save_file_path = save_path + name
        cmd = 'cat '+ root + name
        stdin, stdout, stderr = ssh.exec_command(cmd)
        result = stdout.read()
        if not result:
            return
        with open(save_file_path,'wb+') as fd:
            fd.write(result)
            print('save file:'+save_file_path)
    except :
        print('save path:'+save_file_path)
        print("Unexpected error:", sys.exc_info()[0])

def traverse_dir(root):
    nodes = list(item for item in list_dir(root) if len(item) > 0)
    for node in nodes:
        #如果该节点是文件夹,继续遍历
        if node.endswith('/'):
            traverse_dir(root + node)
        else:
            #如果该节点是文件  则保存该文件
            save_file(root,node)

if __name__ == '__main__':
    if len(output_dir) > 0  and output_dir[-1] != '/':
        output_dir += '/'
    if len(input_dir) > 0 and input_dir[-1] != '/':
        input_dir += '/'
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=hostname, port=port, username=username, password=password)
    traverse_dir(input_dir)
    ssh.close()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/752405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号