1.获取远程服务器连接
from fabric2 import Connection
def get_server_conn(remote_ip, gateway_ip, gateway_port, password):
"""
获取服务器远程连接
:param remote_ip: 远程服务器内网ip
:param gateway_ip: 网关ip(跳板机ip)
:param gateway_port: 网关端口(跳板机端口)
:param password: 远程服务器root账号密码
:return: 返回服务器连接对象
"""
print('*********remote_ip=%s, gateway_ip=%s, gateway_port=%s, password=%s' % (remote_ip, gateway_ip, gateway_port, password))
if (password is None) or (password == ''):
pwd = '123456' # 没有设置密码默认使用123456尝试
else:
pwd = password
if (gateway_ip is None) or (gateway_ip == ''):
# 没有跳板机ip和端口则直接远程到remote_ip
conn = Connection(remote_ip, port=22, user='root', connect_timeout=connect_timeout_second, connect_kwargs={'password': pwd})
else:
if (gateway_port is None) or (gateway_port == ''):
# 如果没有跳板机端口,则默认使用22端口
gateway_port = 22
# 先远程连接到跳板机,再远程到目标服务器内网ip
gateway_conn = Connection(gateway_ip, port=gateway_port, user='root', connect_timeout=connect_timeout_second, connect_kwargs={'password': pwd})
conn = Connection(remote_ip, port=22, user='root', gateway=gateway_conn, connect_timeout=connect_timeout_second, connect_kwargs={'password': pwd})
return conn
2.对远程目标服务器进行操作
以查找某一应用的进程并杀掉进程为例,执行conn.run(command)
操作,command
为linux操作指令
import invoke.exceptions
def kill_app_pid(conn, app_name):
"""获取应用进程id并kill掉该进程"""
try:
find_app_pid = 'ps x | grep {} | grep -v grep'.format(app_name)
result = conn.run(find_app_pid ) # 查看运行中的进程
except invoke.exceptions.UnexpectedExit:
pass
else:
pid_str = result.stdout.split(' ?')[0]
kill_pid = 'kill -9 {}'.format(pid_str)
conn.run(kill_pid)