diff --git a/.gitignore b/.gitignore index 19c6cf9..b128c25 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ conf.json -.vscode \ No newline at end of file +.vscode + +# Ignore anything in the payload, this is downloaded from a url internally on a timely basis. +payload/ \ No newline at end of file diff --git a/conf-template.json b/conf-template.json index 720b2b1..27c1f89 100644 --- a/conf-template.json +++ b/conf-template.json @@ -1,8 +1,9 @@ { + "chkinterval": "", + "filepath": "", "server": "", "port": "", - "payload": "payload/payload.sh", "ssh-user": "", - "ssh-password": "", + "ssh-pw": "", "ssh-key": "" } \ No newline at end of file diff --git a/deploy.py b/deploy.py index f8ba469..c85599b 100644 --- a/deploy.py +++ b/deploy.py @@ -1,7 +1,8 @@ -import paramiko +import paramiko # this sounds like an anime import json import os import time # i need time to get this done +import requests # for getting the commands to run on client # import modules @@ -11,7 +12,8 @@ with open("conf.json", "r") as file: sshc = paramiko.client.SSHClient() healthstatus = "" # possible values: "ok", "err" -healthpassing = True +healthpassing = True +shcommands = [] # set our variables def healthcheck(): @@ -22,16 +24,32 @@ def healthcheck(): else: healthstatus = "ok" +def downloadLatestCommands(url): + r = requests.get(f'{url}') + open(cfg["filepath"], 'wb').write(r.content) + +def commandList(): + global shcommands + cmdtxt = open(cfg["filepath"], "r") + cmddata = cmdtxt.read() + shcommands = cmddata.split("\n") + cmdtxt.close() + def deploy(): sshc.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # so we don't get whined at and crash over a unrecognized host-key - sshc.connect(cfg["server"],port=cfg["port"],key_filename=cfg["ssh-key"]) - - sftp = sshc.open_sftp() # after opening the ssh connection, we'll open a sftp connection. - sftp.put("./payload/payload.sh", "/payload.sh") # upload the payload via SFTP. - - sshc.exec_command("chmod +x $HOME/payload.sh") # make it executable - sshc.exec_command("./payload.sh") # and finally, run the payload. + sshc.connect(cfg["server"],port=cfg["port"],username=cfg["ssh-user"],password=cfg["ssh-pw"],pkey=cfg["ssh-key"]) + + for command in shcommands: + sshc.exec_command(command) + print(f'{command} was executed') + + print("All commands were executed, now disconnecting...") sshc.close # close the connection. + + # sshc.exec_command("chmod +x $HOME/payload.sh") # make it executable + # sshc.exec_command("./payload.sh") # and finally, run the payload. + + while True: healthcheck() @@ -43,10 +61,10 @@ while True: healthcheck() if healthstatus == "ok": - print("ONT responded, deploying payload!") - healthpassing == True; + print("ONT responded after a fail, deploying payload!") + healthpassing == True deploy() break else: print("Got a response! health status is ok.") - time.sleep(30) # we will run this loop every 30 seconds so we don't pelt the poor thing in pings. + time.sleep(cfg["chkinterval"]) # we will run this loop every X seconds, defined by checkinterval diff --git a/payload/payload.sh b/payload/payload.sh deleted file mode 100644 index b9a45cc..0000000 --- a/payload/payload.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -wall "it works!!" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 3d318a8..184ecc0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,93 +1,2 @@ -appdirs==1.4.4 -argcomplete==2.0.0 -bcrypt==4.1.2 -beautifulsoup4==4.12.2 -blivet==3.7.1 -blivet-gui==2.4.2 -Brlapi==0.8.4 -Brotli==1.0.9 -certifi==2022.9.24 -cffi==1.15.1 -chardet==5.2.0 -charset-normalizer==3.1.0 -click==8.1.3 -cryptography==41.0.7 -cssselect==1.1.0 -cupshelpers==1.0 -dasbus==1.7 -dbus-python==1.3.2 -decorator==5.1.1 -Deprecated==1.2.14 -distro==1.8.0 -dnf==4.18.2 -docopt==0.6.2 -evdev==1.6.1 -fedora-third-party==0.10 -file-magic==0.4.0 -gpg==1.17.1 -humanize==3.13.1 -idna==3.4 -initial-setup==0.3.97 -invoke==2.2.0 -Jinja2==3.0.3 -langtable==0.0.64 -libcomps==0.1.20 -libdnf==0.72.0 -libvirt-python==9.0.0 -lxml==4.9.2 -MarkupSafe==2.1.2 -mutagen==1.46.0 -nftables==0.1 -numpy==1.24.4 -olefile==0.46 -packaging==23.0 -paramiko==3.4.0 -pexpect==4.8.0 -pid==2.2.3 -Pillow==9.5.0 -ply==3.11 -productmd==1.37 -protonvpn-cli==2.2.11 -ptyprocess==0.7.0 -pwquality==1.4.5 -pycairo==1.23.0 -pycparser==2.20 -pycryptodomex==3.19.0 -pycups==2.0.1 -pycurl==7.45.2 -pyenchant==3.2.2 -PyGObject==3.44.2 -pykickstart==3.47 -PyNaCl==1.5.0 -pyparted==3.12.0 -PyQt5==5.15.9 -PyQt5-sip==12.11.1 -PySocks==1.7.1 -python-augeas==1.1.0 -python-dateutil==2.8.2 -python-gettext==4.0 -python-manatools==0.0.4 -python-meh==0.51 -pythondialog==3.5.3 -pyudev==0.24.0 -pyxdg==0.27 -PyYAML==6.0 -regex==2023.10.3 -requests==2.28.2 -requests-file==1.5.1 -requests-ftp==0.3.1 -rpm==4.18.2 -scour==0.38.2 -selinux==3.5 -sepolicy==3.5 -setools==4.4.3 -simpleaudio==1.0.4 -simpleline==1.9.0 -six==1.16.0 -sos==4.5.1 -soupsieve==2.4.1 -systemd-python==235 -urllib3==1.26.18 -websockets==10.4 -wrapt==1.16.0 -yt-dlp==2023.10.7 +paramiko +requests \ No newline at end of file