Add options to ssh commands
This commit is contained in:
parent
b182c359fc
commit
b59a4acaa7
5 changed files with 47 additions and 28 deletions
11
main.py
11
main.py
|
@ -12,7 +12,7 @@ from ip.ipv4 import ipv4
|
||||||
if not isfile("config.json"):
|
if not isfile("config.json"):
|
||||||
with open("config.json", "w") as config:
|
with open("config.json", "w") as config:
|
||||||
data = {"database": {"host": "", "user": "", "password": "", "name": ""},
|
data = {"database": {"host": "", "user": "", "password": "", "name": ""},
|
||||||
"ssh": {"host": "", "port": 22, "user": "", "key": ""},
|
"ssh": {"host": "", "port": 22, "user": "", "key": "", "options": []},
|
||||||
"interface": {"default": ""},
|
"interface": {"default": ""},
|
||||||
"IPv6": {"template": ""}}
|
"IPv6": {"template": ""}}
|
||||||
dump(data, config)
|
dump(data, config)
|
||||||
|
@ -29,6 +29,7 @@ SSH_HOST = conf["ssh"]["host"]
|
||||||
SSH_PORT = conf["ssh"]["port"]
|
SSH_PORT = conf["ssh"]["port"]
|
||||||
SSH_USER = conf["ssh"]["user"]
|
SSH_USER = conf["ssh"]["user"]
|
||||||
SSH_KEY = conf["ssh"]["key"]
|
SSH_KEY = conf["ssh"]["key"]
|
||||||
|
SSH_OPTIONS = conf["ssh"]["options"]
|
||||||
|
|
||||||
IPV6_TEMPLATE = conf["IPv6"]["template"]
|
IPV6_TEMPLATE = conf["IPv6"]["template"]
|
||||||
|
|
||||||
|
@ -61,9 +62,9 @@ out = ipv4(args.prefix, ipl, macl)
|
||||||
# Insert the list
|
# Insert the list
|
||||||
if not args.delete:
|
if not args.delete:
|
||||||
insert_whmcs_ipv4(out, args.interface, db, debug, args.verbose)
|
insert_whmcs_ipv4(out, args.interface, db, debug, args.verbose)
|
||||||
insert_router_ipv4(out, args.interface, SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, debug, args.verbose)
|
insert_router_ipv4(out, args.interface, SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, debug, args.verbose, SSH_OPTIONS)
|
||||||
insert_router_ipv6(out, IPV6_TEMPLATE, args.interface, SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, debug, args.verbose)
|
insert_router_ipv6(out, IPV6_TEMPLATE, args.interface, SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, debug, args.verbose, SSH_OPTIONS)
|
||||||
else:
|
else:
|
||||||
remove_whmcs_ipv4(out, db, debug, args.verbose)
|
remove_whmcs_ipv4(out, db, debug, args.verbose)
|
||||||
remove_router_ipv4(out, SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, debug, args.verbose)
|
remove_router_ipv4(out, SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, debug, args.verbose, SSH_OPTIONS)
|
||||||
remove_router_ipv6(out, IPV6_TEMPLATE, SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, debug, args.verbose)
|
remove_router_ipv6(out, IPV6_TEMPLATE, SSH_HOST, SSH_PORT, SSH_USER, SSH_KEY, debug, args.verbose, SSH_OPTIONS)
|
||||||
|
|
|
@ -13,7 +13,7 @@ rmac = re.compile(r"(?:[A-F]|[0-9]){1,3}:(?:[A-F]|[0-9]){1,3}:(?:[A-F]|[0-9]){1,
|
||||||
r"{1,3}:(?:[A-F]|[0-9]){1,3}")
|
r"{1,3}:(?:[A-F]|[0-9]){1,3}")
|
||||||
|
|
||||||
|
|
||||||
def get_router_ipv4(host: str, port: int, user: str, key: str) -> [IPv4Address]:
|
def get_router_ipv4(host: str, port: int, user: str, key: str, ssh_options: list = []) -> [IPv4Address]:
|
||||||
"""
|
"""
|
||||||
Gets IPv4 list of the router
|
Gets IPv4 list of the router
|
||||||
|
|
||||||
|
@ -25,16 +25,18 @@ def get_router_ipv4(host: str, port: int, user: str, key: str) -> [IPv4Address]:
|
||||||
:type port: str
|
:type port: str
|
||||||
:param key: The SSH key of the router
|
:param key: The SSH key of the router
|
||||||
:type key: str
|
:type key: str
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
:return: List of IPv4 in the router
|
:return: List of IPv4 in the router
|
||||||
:rtype: [IPv4Address]
|
:rtype: [IPv4Address]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port), "/ip arp print"],
|
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port), "/ip arp print"],
|
||||||
stdout=PIPE).stdout.decode()
|
stdout=PIPE).stdout.decode()
|
||||||
return [IPv4Address(i) for i in ripv4.findall(out)]
|
return [IPv4Address(i) for i in ripv4.findall(out)]
|
||||||
|
|
||||||
|
|
||||||
def get_router_ipv4_id(ipv4: IPv4Address, host: str, port: int, user: str, key: str) -> int:
|
def get_router_ipv4_id(ipv4: IPv4Address, host: str, port: int, user: str, key: str, ssh_options: list = []) -> int:
|
||||||
"""
|
"""
|
||||||
Get IPv4 id of the router
|
Get IPv4 id of the router
|
||||||
|
|
||||||
|
@ -48,11 +50,13 @@ def get_router_ipv4_id(ipv4: IPv4Address, host: str, port: int, user: str, key:
|
||||||
:type port: str
|
:type port: str
|
||||||
:param key: The SSH key of the router
|
:param key: The SSH key of the router
|
||||||
:type key: str
|
:type key: str
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
:return: List of IPv4 in the router
|
:return: List of IPv4 in the router
|
||||||
:rtype: int
|
:rtype: int
|
||||||
"""
|
"""
|
||||||
|
|
||||||
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port), "/ip arp print"],
|
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port), "/ip arp print"],
|
||||||
stdout=PIPE).stdout.decode()
|
stdout=PIPE).stdout.decode()
|
||||||
for i in ripv4_id.findall(out):
|
for i in ripv4_id.findall(out):
|
||||||
if i[1] == str(ipv4):
|
if i[1] == str(ipv4):
|
||||||
|
@ -60,7 +64,7 @@ def get_router_ipv4_id(ipv4: IPv4Address, host: str, port: int, user: str, key:
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
|
|
||||||
def get_router_ipv6(host: str, port: int, user: str, key: str) -> [IPv6Address]:
|
def get_router_ipv6(host: str, port: int, user: str, key: str, ssh_options: list = []) -> [IPv6Address]:
|
||||||
"""
|
"""
|
||||||
Gets IPv6 list of the router
|
Gets IPv6 list of the router
|
||||||
|
|
||||||
|
@ -72,16 +76,18 @@ def get_router_ipv6(host: str, port: int, user: str, key: str) -> [IPv6Address]:
|
||||||
:type port: str
|
:type port: str
|
||||||
:param key: The SSH key of the router
|
:param key: The SSH key of the router
|
||||||
:type key: str
|
:type key: str
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
:return: List of IPv6 in the router
|
:return: List of IPv6 in the router
|
||||||
:rtype: [IPv6Address]
|
:rtype: [IPv6Address]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port),
|
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port),
|
||||||
"/ipv6 route print"], stdout=PIPE).stdout.decode()
|
"/ipv6 route print"], stdout=PIPE).stdout.decode()
|
||||||
return [IPv6Address(i) for i in ripv6.findall(out)]
|
return [IPv6Address(i) for i in ripv6.findall(out)]
|
||||||
|
|
||||||
|
|
||||||
def get_router_ipv6_id(ipv6: str, host: str, port: int, user: str, key: str) -> int:
|
def get_router_ipv6_id(ipv6: str, host: str, port: int, user: str, key: str, ssh_options: list = []) -> int:
|
||||||
"""
|
"""
|
||||||
Get IPv6 id of the router
|
Get IPv6 id of the router
|
||||||
|
|
||||||
|
@ -97,11 +103,13 @@ def get_router_ipv6_id(ipv6: str, host: str, port: int, user: str, key: str) ->
|
||||||
:type port: str
|
:type port: str
|
||||||
:param key: The SSH key of the router
|
:param key: The SSH key of the router
|
||||||
:type key: str
|
:type key: str
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
:return: The id of the given IPv6
|
:return: The id of the given IPv6
|
||||||
:rtype: int
|
:rtype: int
|
||||||
"""
|
"""
|
||||||
|
|
||||||
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port),
|
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port),
|
||||||
"/ipv6 route print"], stdout=PIPE).stdout.decode()
|
"/ipv6 route print"], stdout=PIPE).stdout.decode()
|
||||||
for i in ripv6_id.findall(out):
|
for i in ripv6_id.findall(out):
|
||||||
if i[1] == ipv6[:-5]:
|
if i[1] == ipv6[:-5]:
|
||||||
|
@ -109,7 +117,7 @@ def get_router_ipv6_id(ipv6: str, host: str, port: int, user: str, key: str) ->
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
|
|
||||||
def get_router_mac(host: str, port: int, user: str, key: str) -> [str]:
|
def get_router_mac(host: str, port: int, user: str, key: str, ssh_options: list = []) -> [str]:
|
||||||
"""
|
"""
|
||||||
Gets MAC list of the router
|
Gets MAC list of the router
|
||||||
|
|
||||||
|
@ -121,10 +129,12 @@ def get_router_mac(host: str, port: int, user: str, key: str) -> [str]:
|
||||||
:type port: str
|
:type port: str
|
||||||
:param key: The SSH key of the router
|
:param key: The SSH key of the router
|
||||||
:type key: str
|
:type key: str
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
:return: List of MAC in the router
|
:return: List of MAC in the router
|
||||||
:rtype: [str]
|
:rtype: [str]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port), "/ip arp print"],
|
out = run(["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port), "/ip arp print"],
|
||||||
stdout=PIPE).stdout.decode()
|
stdout=PIPE).stdout.decode()
|
||||||
return rmac.findall(out)
|
return rmac.findall(out)
|
||||||
|
|
|
@ -5,7 +5,7 @@ from subprocess import run
|
||||||
|
|
||||||
|
|
||||||
def insert_router_ipv4(insert: [(IPv4Address, str, IPv4Address, int)], interface: str, host: str, port: int, user: str,
|
def insert_router_ipv4(insert: [(IPv4Address, str, IPv4Address, int)], interface: str, host: str, port: int, user: str,
|
||||||
key: str, debug: bool = False, verbose: bool = False):
|
key: str, debug: bool = False, verbose: bool = False, ssh_options: list = []):
|
||||||
"""
|
"""
|
||||||
This function insert IPv4 on the router
|
This function insert IPv4 on the router
|
||||||
|
|
||||||
|
@ -25,16 +25,18 @@ def insert_router_ipv4(insert: [(IPv4Address, str, IPv4Address, int)], interface
|
||||||
:type debug: bool
|
:type debug: bool
|
||||||
:param verbose: Print each command on router
|
:param verbose: Print each command on router
|
||||||
:type verbose: bool
|
:type verbose: bool
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ipl = get_router_ipv4(host, port, user, key)
|
ipl = get_router_ipv4(host, port, user, key, ssh_options)
|
||||||
macl = get_router_mac(host, port, user, key)
|
macl = get_router_mac(host, port, user, key, ssh_options)
|
||||||
|
|
||||||
print("Start insert IPv4 on router")
|
print("Start insert IPv4 on router")
|
||||||
for i in insert:
|
for i in insert:
|
||||||
if i[1]:
|
if i[1]:
|
||||||
if (i[0] not in ipl) and (i[1] not in macl):
|
if (i[0] not in ipl) and (i[1] not in macl):
|
||||||
cmd = ["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port),
|
cmd = ["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port),
|
||||||
f"/ip arp add address={i[0]} mac-address={i[1]} interface={interface}"]
|
f"/ip arp add address={i[0]} mac-address={i[1]} interface={interface}"]
|
||||||
if not debug:
|
if not debug:
|
||||||
run(cmd)
|
run(cmd)
|
||||||
|
@ -44,7 +46,7 @@ def insert_router_ipv4(insert: [(IPv4Address, str, IPv4Address, int)], interface
|
||||||
|
|
||||||
|
|
||||||
def insert_router_ipv6(insert: [(IPv4Address, str, IPv4Address, int)], ipv6: str, interface: str, host: str, port: int, user: str,
|
def insert_router_ipv6(insert: [(IPv4Address, str, IPv4Address, int)], ipv6: str, interface: str, host: str, port: int, user: str,
|
||||||
key: str, debug: bool = False, verbose: bool = False):
|
key: str, debug: bool = False, verbose: bool = False, ssh_options: list = []):
|
||||||
"""
|
"""
|
||||||
This function insert IPv6 on the router
|
This function insert IPv6 on the router
|
||||||
|
|
||||||
|
@ -66,6 +68,8 @@ def insert_router_ipv6(insert: [(IPv4Address, str, IPv4Address, int)], ipv6: str
|
||||||
:type debug: bool
|
:type debug: bool
|
||||||
:param verbose: Print each command on router
|
:param verbose: Print each command on router
|
||||||
:type verbose: bool
|
:type verbose: bool
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print("Start insert IPv6 on router")
|
print("Start insert IPv6 on router")
|
||||||
|
@ -73,7 +77,7 @@ def insert_router_ipv6(insert: [(IPv4Address, str, IPv4Address, int)], ipv6: str
|
||||||
if i[1]:
|
if i[1]:
|
||||||
ip = ipv6.format(str(i[0]).split(".")[-1])
|
ip = ipv6.format(str(i[0]).split(".")[-1])
|
||||||
gateway = link_local(i[1])
|
gateway = link_local(i[1])
|
||||||
cmd = ["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port),
|
cmd = ["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port),
|
||||||
f"/ipv6 route add dst-address={ip} gateway={gateway}%{interface}"]
|
f"/ipv6 route add dst-address={ip} gateway={gateway}%{interface}"]
|
||||||
if not debug:
|
if not debug:
|
||||||
run(cmd)
|
run(cmd)
|
||||||
|
|
|
@ -4,7 +4,7 @@ from subprocess import run
|
||||||
|
|
||||||
|
|
||||||
def remove_router_ipv4(remove: [(IPv4Address, str, IPv4Address, int)], host: str, port: int, user: str,
|
def remove_router_ipv4(remove: [(IPv4Address, str, IPv4Address, int)], host: str, port: int, user: str,
|
||||||
key: str, debug: bool = False, verbose: bool = False):
|
key: str, debug: bool = False, verbose: bool = False, ssh_options: list = []):
|
||||||
"""
|
"""
|
||||||
This function remove IPv6 on the router
|
This function remove IPv6 on the router
|
||||||
|
|
||||||
|
@ -22,13 +22,15 @@ def remove_router_ipv4(remove: [(IPv4Address, str, IPv4Address, int)], host: str
|
||||||
:type debug: bool
|
:type debug: bool
|
||||||
:param verbose: Print each command on router
|
:param verbose: Print each command on router
|
||||||
:type verbose: bool
|
:type verbose: bool
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print("Start remove IPv4 on router")
|
print("Start remove IPv4 on router")
|
||||||
for i in remove:
|
for i in remove:
|
||||||
id = get_router_ipv4_id(i[0], host, port, user, key)
|
id = get_router_ipv4_id(i[0], host, port, user, key, ssh_options)
|
||||||
if id != -1:
|
if id != -1:
|
||||||
cmd = ["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port),
|
cmd = ["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port),
|
||||||
f"/ip arp remove {id}"]
|
f"/ip arp remove {id}"]
|
||||||
if not debug:
|
if not debug:
|
||||||
run(cmd)
|
run(cmd)
|
||||||
|
@ -40,7 +42,7 @@ def remove_router_ipv4(remove: [(IPv4Address, str, IPv4Address, int)], host: str
|
||||||
|
|
||||||
|
|
||||||
def remove_router_ipv6(remove: [(IPv4Address, str, IPv4Address, int)], ipv6: str, host: str, port: int, user: str,
|
def remove_router_ipv6(remove: [(IPv4Address, str, IPv4Address, int)], ipv6: str, host: str, port: int, user: str,
|
||||||
key: str, debug: bool = False, verbose: bool = False):
|
key: str, debug: bool = False, verbose: bool = False, ssh_options: list = []):
|
||||||
"""
|
"""
|
||||||
This function remove IPv6 on the router
|
This function remove IPv6 on the router
|
||||||
|
|
||||||
|
@ -60,14 +62,16 @@ def remove_router_ipv6(remove: [(IPv4Address, str, IPv4Address, int)], ipv6: str
|
||||||
:type debug: bool
|
:type debug: bool
|
||||||
:param verbose: Print each command on router
|
:param verbose: Print each command on router
|
||||||
:type verbose: bool
|
:type verbose: bool
|
||||||
|
:param ssh_options: SSH optionals arguments
|
||||||
|
:type ssh_options: list
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print("Start remove IPv6 on router")
|
print("Start remove IPv6 on router")
|
||||||
for i in remove:
|
for i in remove:
|
||||||
ip = ipv6.format(str(i[0]).split(".")[-1])
|
ip = ipv6.format(str(i[0]).split(".")[-1])
|
||||||
id = get_router_ipv6_id(ip, host, port, user, key)
|
id = get_router_ipv6_id(ip, host, port, user, key, ssh_options)
|
||||||
if id != -1:
|
if id != -1:
|
||||||
cmd = ["ssh", "-i", key, "-o", "StrictHostKeyChecking no", f"{user}@{host}", "-p", str(port),
|
cmd = ["ssh", "-i", key, "-o", "StrictHostKeyChecking no"] + ssh_options + [f"{user}@{host}", "-p", str(port),
|
||||||
f"/ipv6 route remove {id}"]
|
f"/ipv6 route remove {id}"]
|
||||||
if not debug:
|
if not debug:
|
||||||
run(cmd)
|
run(cmd)
|
||||||
|
|
|
@ -35,7 +35,7 @@ def insert_whmcs_ipv4(insert: [(IPv4Address, str, IPv4Address, int)], interface:
|
||||||
# For every IP to insert
|
# For every IP to insert
|
||||||
for i in insert:
|
for i in insert:
|
||||||
if i[1]:
|
if i[1]:
|
||||||
cmd = f"INSERT INTO mg_proxmox_addon_ip (ip, type, mac_address, subnet_mask, cidr, sid gateway, tag) " \
|
cmd = f"INSERT INTO mg_proxmox_addon_ip (ip, type, mac_address, subnet_mask, cidr, sid, gateway, tag) " \
|
||||||
f"VALUES ('{i[0]}', 'IPv4', '{i[1]}', '{i[2]}', {i[3]}, 0, '{gateway}', {vlan})"
|
f"VALUES ('{i[0]}', 'IPv4', '{i[1]}', '{i[2]}', {i[3]}, 0, '{gateway}', {vlan})"
|
||||||
try:
|
try:
|
||||||
cursor.execute(cmd)
|
cursor.execute(cmd)
|
||||||
|
|
Loading…
Reference in a new issue