需要使用庫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)