Initial commit
This commit is contained in:
commit
5a16d7e9bf
4 changed files with 92 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.venv
|
||||||
|
.ruff_cache
|
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Calliope
|
||||||
|
|
||||||
|
A monorepo for QoL stuff for adaptation
|
13
reset-ise-passwd/default.nix
Normal file
13
reset-ise-passwd/default.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{ pkgs ? import <nixpkgs> { } }:
|
||||||
|
|
||||||
|
pkgs.mkShell {
|
||||||
|
packages = [
|
||||||
|
(pkgs.python3.withPackages (python-pkgs: [
|
||||||
|
python-pkgs.pexpect
|
||||||
|
python-pkgs.icecream
|
||||||
|
python-pkgs.mypy
|
||||||
|
python-pkgs.ruff
|
||||||
|
]))
|
||||||
|
pkgs.openssh
|
||||||
|
];
|
||||||
|
}
|
74
reset-ise-passwd/main.py
Executable file
74
reset-ise-passwd/main.py
Executable file
|
@ -0,0 +1,74 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import argparse
|
||||||
|
import logging
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from logging import getLogger
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
import pexpect
|
||||||
|
|
||||||
|
|
||||||
|
def login(username: str, password: str) -> pexpect.spawn:
|
||||||
|
child = pexpect.spawn(
|
||||||
|
f"ssh -i /dev/null {username}@{addr}",
|
||||||
|
encoding="utf-8",
|
||||||
|
logfile=sys.stdout,
|
||||||
|
)
|
||||||
|
child.expect("password:")
|
||||||
|
child.sendline(password)
|
||||||
|
return child
|
||||||
|
|
||||||
|
|
||||||
|
def change_password(child: pexpect.spawn, old_password: str, new_password: str) -> None:
|
||||||
|
child.expect("password:")
|
||||||
|
child.sendline(old_password)
|
||||||
|
child.expect("[Nn]ew password:")
|
||||||
|
child.sendline(new_password)
|
||||||
|
child.expect("[Nn]ew password:")
|
||||||
|
child.sendline(new_password)
|
||||||
|
child.expect_list([re.compile("success"), re.compile(f"{username}#")])
|
||||||
|
logger.info("Changing password to %s", new_password)
|
||||||
|
|
||||||
|
|
||||||
|
def set_new_password_and_verify(
|
||||||
|
child: pexpect.spawn,
|
||||||
|
password: str,
|
||||||
|
new_password: str,
|
||||||
|
) -> pexpect.spawn:
|
||||||
|
change_password(child, password, new_password)
|
||||||
|
|
||||||
|
child = login(username, new_password)
|
||||||
|
child.expect(f"{username}#")
|
||||||
|
return child
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
logger = getLogger(__name__)
|
||||||
|
logger.level = logging.DEBUG
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("addr", help="IP address of the device")
|
||||||
|
parser.add_argument("username", help="Username of the device", default="admin")
|
||||||
|
parser.add_argument("password", help="Password of the device")
|
||||||
|
args = parser.parse_args()
|
||||||
|
username = args.username
|
||||||
|
password = args.password
|
||||||
|
addr = args.addr
|
||||||
|
try:
|
||||||
|
passwords: List[str] = [password] + [
|
||||||
|
"".join([f"{i}{j}" for i in password]) for j in range(4)
|
||||||
|
]
|
||||||
|
|
||||||
|
child = login(username, password)
|
||||||
|
new_password = passwords.pop()
|
||||||
|
child = set_new_password_and_verify(child, password, new_password)
|
||||||
|
|
||||||
|
while len(passwords):
|
||||||
|
password = new_password
|
||||||
|
child.sendline("password")
|
||||||
|
new_password = passwords.pop()
|
||||||
|
child = set_new_password_and_verify(child, password, new_password)
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
logger.exception("man idek anymore, file a bug")
|
Loading…
Add table
Reference in a new issue