python远程执行ssh脚本
本demo需要pytheon3和pip3,还需要paramiko包 import paramiko # 连接远程服务器并执行linux命令(只能用于简单的命令执行,无法进行密码输入操作) def sshd(): # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 远程服务器地址 ipps = ['88.88.88.88']; for ip in ipps: # 连接服务器 ssh.connect(ip, 22, 'root', '123456', timeout=10) print("link===> : " + ip) # ---运行tomcat---begin exec_command(ssh, 'cd /usr/local/tomcat/bin') exec_command(ssh, './start.sh') # ---运行tomcat---end # ---显示命令返回信息---begin resultStr = exec_command(ssh, 'ls') print(resultStr) # ---显示命令返回信息---begin # ---校验信息---begin haveflag = checkStr(resultStr, 'tomcat') print(haveflag) # ---校验信息---end # 关闭连接 ssh.close() print("linkClose===> : " + ip) def exec_command(ssh, command): stdin, stdout, stderr = ssh.exec_command(command) # 获取命令结果 res, err = stdout.read(), stderr.read() result = res if res else err resultStr = result.decode() return resultStr # resultStr中是否包含strinfo(如果有,则返回它所在的位置;如果没有,则返回-1) def checkStr(resultStr, strinfo): try: return resultStr.index(strinfo); except BaseException: print('Warning: 未找到相关字符') return -1 # 运行 sshd() ================================================================================================= import time import paramiko # 连接远程服务器并执行linux命令 def sshd(): # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 远程服务器地址 ipps = ['88.88.88.88']; for ip in ipps: # 连接服务器 ssh.connect(ip, 22, 'root', '123456', timeout=10) # 直接登录终端,返回通道对象 channel = ssh.invoke_shell() print("link===> : " + ip) # ---scp---begin exec_command(channel, 'scp root@127.0.0.1:/root/abc.txt /usr/local/', 3) # 第一次连接会有个信任提示 exec_command(channel, 'yes', 2) # 输入密码(可能有些不需要密码,但是输入一次也没关系,直接会报没有本命令) exec_command(channel, '123456', 2) # ---scp---end # ---运行tomcat---begin exec_command(channel, 'cd /usr/local/tomcat/bin', 1) exec_command(channel, './start.sh', 6) # ---运行tomcat---end # ---登录数据库---begin exec_command(channel, 'mysql -u root -p', 1) # 输入密码 exec_command(channel, '123456', 1) # ---登录数据库---end # ---获取控制台信息---begin resultStr = getConsoleTXT(channel) print("==" + resultStr) # ---获取控制台信息---end # ---校验信息---begin haveflag = checkStr(resultStr, 'xxxxxx') print(haveflag) # ---校验信息---end # 关闭连接 channel.close() ssh.close() print("linkClose===> : " + ip) def exec_command(channel, command, second): # /n是换行 channel.send(command + '\n') # sleep一下,是为了让程序执行完,单位是:秒 time.sleep(second); # 获取通道输出信息,每次获取的都是未获取的(比如第一次执行这个方法获取了第一行信息,下次再执行获取的就是第二行开始的当前所有控制台打印的信息) def getConsoleTXT(channel): return channel.recv(9999).decode() # resultStr中是否包含strinfo(如果有,则返回它所在的位置;如果没有,则返回-1) def checkStr(resultStr, strinfo): try: return resultStr.index(strinfo); except BaseException: print('Warning: 未找到相关字符') return -1 # 运行 sshd()
发布者:songJian 点击数:4070 发布时间:2019-04-03 22:22:54 更新时间:2021-08-09 00:02:35
正在加载评论...