需要使用库paramiko
import paramiko # 用于SSH
import os
- 文件传输
1.1 在目标主机上创建文件夹
def MakeFilePathOnBench(ip,port_number,user_name,private_key):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = ip, port=port_number, username=user_name, pkey=private_key)
stdin, stdout, stderr = ssh.exec_command('find /fs/Test/SDKTest')
result = stdout.read().decode('utf-8')
if (len(result) != 0):
stdin, stdout, stderr = ssh.exec_command('rm -r /fs/Test/SDKTest')
CreareNewPathOnbench(ip,port_number,user_name,private_key)
ssh.close()
def CreareNewPathOnbench(ip,port_number,user_name,private_key):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = ip, port=port_number, username="root", pkey=private_key)
stdin, stdout, stderr = ssh.exec_command('mkdir /fs/Test/SDKTest/')
ssh.close()
1.2 向目标主机上传文件
def PutFileToBench(ip,port_number,user_name,private_key):
transport = paramiko.Transport((ip, port_number))
transport.connect(username=user_name, pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('test_utils','/fs/Test/SDKTest/test_utils') #将可执行文件test_utils拷贝到目标路径下,并创建了同名文件
sftp.put('test.so','/fs/Test/SDKTest/test_1.so')#将动态链接库test.so 上传到目标主机,文件名为test_1.so
sftp.close()
transport.close()
1.3 从目标主机下载文件
def GetLogFill(ip,port_number,user_name,private_key):
transport = paramiko.Transport((ip, port_number))
transport.connect(username=user_name, pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
local_dir = os.getcwd()
remote_dir = "/fs/Test/SDKTest/"
files = sftp.listdir(remote_dir) #files存放/fs/Test/SDKTest下的所有文件,可理解为list类型
print('******************* file copy from bench ****************************')
for f in files:
sftp.get(os.path.join(remote_dir, f), os.path.join(local_dir, f)) #将files中的所有文件下载到当前主机的当前路径下
print(f) #打印files中文件名
sftp.close()
transport.close()
2.指令传输
def execuateSDKTest(ip,port_number,user_name,private_key):
MakeFilePathOnBench(ip,port_number,user_name,private_key)
PutFileToBench(ip,port_number,user_name,private_key)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = ip, port=port_number, username=user_name, pkey=private_key)
chmod_cmd = "chmod -R 777 /fs/Test/SDKTest/*"
stdin, stdout, stderr = ssh.exec_command(chmod_cmd)
cd_cmd = "cd /fs/Test/SDKTest"
pwd_cmd = "pwd"
ls_cmd = "ls /fs/Test/SDKTest"
exec_cmd = "./test_utils"
stdin, stdout, stderr = ssh.exec_command(cd_cmd+';'+pwd_cmd+';'+exec_cmd)
print('******************* Gtest log information ****************************')
for i in stdout.readlines():
print(i)
ssh.close()
3.测试程序主函数
if __name__ == '__main__':
ip = '192.168.1.26'
port = 22
username = 'root'
env_dist = os.environ
private_key_path = env_dist.get('KEY_DEV') #KEY_DEV为环境变量,存放SSH链接的公钥的文件地址
private_key = paramiko.RSAKey.from_private_key_file(private_key_path)
execuateSDKTest(ip,port,username,private_key)
GetLogFill(ip,port,username,private_key)