import os import paramiko import subprocess from shutil import copy2 xxxpath="xxx/xxx" # RSA格式私钥可以被paramiko使用执行转换命令:ssh-keygen -p -m PEM -t RSA -f ~/.ssh/copyid_rsa key_path = 'xxx/.ssh/copyid_rsa' # 定义上传函数,paramiko通过公钥免密连接 def upload(root_path, privateKey): client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname='服务器ip', port='端口', username='用户', key_filename=privateKey, allow_agent=True) sftp = client.open_sftp() # 利用os的walk函数获取本地目录文件列表 for dirspath, dirsname, files in os.walk(xxxpath): root_linux = dirspath.replace('\\', '/') # sftp的mkdir函数不支持创建多级目录,固使用ssh连接后linux原生命令创建 remote_path = os.path.join('xxx/path', root_linux[29:]) stdin, stdout, stderr = client.exec_command( ''.join(['mkdir -p ' + remote_path])) for file in files: upload_file = os.path.join(root_linux, file).replace('\\', '/') print(u'Put files...' + upload_file) sftp.put(upload_file, os.path.join( remote_path, file).replace('\\', '/')) client.close() sftp.close() upload(xxxpath, key_path)