首先安装模块:pip install paramiko
参考官方文档用法:http://docs.paramiko.org/en/2.0/api/client.html
获取linux服务器的ip,代码如下:
import paramiko import re class GetLinuxIp(): '''获取linux服务器ip''' def __init__(self, hostname, port, username, password, cmds): ''' :param hostname: linux主机的ip :param port: linux主机的端口 :param username: linux主机登录用户名 :param password: linux主机登录密码 :param cmds: 需要执行的linux命令 ''' self.ip = hostname self.port = port self.user = username self.password = password self.cmds = cmds try: self.client = paramiko.SSHClient() # 实例化客户端 # 保存服务器的主机名和密钥信息 self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务端,进行身份验证 self.client.connect(self.ip, self.port, self.user, self.password, timeout=10) print("连接成功...") except Exception as e: # raise e print("连接失败,错误是{}".format(e)) raise e def excute_command(self): '''执行命令''' # todo stdin是标准输入文件,stdout是标准输出文件,stderr标准出错文件,应用在输出的重新定位上。 self.stdin, self.stdout, self.stderr = self.client.exec_command(self.cmds) def get_result(self): '''获取结果''' result = self.stdout.read().decode() pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}') self.ip = pattern.search(result).group() print("获取到linux服务器的ip是:{}".format(self.ip)) def __del__(self): '''关闭连接''' self.client.close() print("连接关闭...") if __name__ == '__main__': linux = GetLinuxIp("121.196.120.113", 22, "root", "123_Xiaohaikun", "ifconfig") linux.excute_command() linux.get_result()
运行结果如图:
执行多条linux命令,多条命令放在一个单引号下面,各命令之间用分号隔开,如:cmd_str = "cd /;cd etc;ls -l;" 且在末尾加上get_pty=True
demo如下:
import paramiko def remot_connect(hostname, port, username, password, cmd_str): # 创建SSHClient 实例对象 ssh = paramiko.SSHClient() # 调用方法,表示没有存储远程机器的公钥,允许访问 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接远程机器,地址,端口,用户名密码 ssh.connect(hostname, port, username, password, timeout=10) # 输出命令执行结果 stdin, stdout, stderr = ssh.exec_command(cmd_str, get_pty=True) result = stdout.read() print(result.decode()) # 关闭连接 ssh.close() if __name__ == '__main__': hostname = "121.196.120.113" port = 22 username = "root" password = "123_Xiaohaikun" cmd_str = "cd /;cd etc;ls -l;" remot_connect(hostname, port, username, password, cmd_str)
代码运行结果如图:
xshell上显示如图:
上传文件:
demo如下:
import paramiko import datetime import os def upload(hostname, username, password, port, local_file_path, remote_path): ''' :param hostname: :param username: :param password: :param port: :param local_file_path: 本地文件路径 :param remote_path: linux保存路径 :return: ''' try: t = paramiko.Transport((hostname, port)) t.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(t) print('开始上传文件{}'.format(datetime.datetime.now())) try: sftp.put(local_file_path, remote_path) except Exception as e: sftp.mkdir(os.path.split(remote_path)[0]) sftp.put(local_file_path, remote_path) print("从本地: {} 上传到linux目录下: {}".format(local_file_path, remote_path)) print('文件上传成功 {} '.format(datetime.datetime.now())) t.close() except Exception as e: print(repr(e)) if __name__ == '__main__': hostname = '121.196.120.113' username = 'root' password = '123_Xiaohaikun' port = 22 local_file_path = r'D:\Video\1.mp4' remote_path = os.path.join('/root/temp/', "1.mp4") upload(hostname, username, password, port, local_file_path, remote_path)
运行结果: