Files
CasSsoService/docker/ssh_diag.py
T

29 lines
1.7 KiB
Python

import paramiko
HOST = "192.168.10.157"; PORT = 22; USER = "yunhai"; PASS = "123456"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, port=PORT, username=USER, password=PASS, timeout=20)
def run(cmd):
stdin, stdout, stderr = ssh.exec_command(cmd)
out = stdout.read().decode('utf-8', 'ignore')
err = stderr.read().decode('utf-8', 'ignore')
return out + ("ERR:" + err if err else "")
print("=== 1) running container image & status ===")
print(run("docker ps --filter name=cas-sso --format '{{.Image}} | {{.Status}}'"))
print("inspect image id:")
print(run("docker inspect cas-sso --format '{{.Image}}' 2>/dev/null"))
print("\n=== 2) effective cas.properties default-redirect-url (container) ===")
print(run("docker exec cas-sso grep -ri 'default-redirect-url' /etc/cas/config/ 2>/dev/null || echo 'NOT FOUND in /etc/cas/config'"))
print(run("docker exec cas-sso sh -c \"cat /etc/cas/config/cas.properties 2>/dev/null | grep -i redirect\" || echo none"))
print("\n=== 3) controller class feature in RUNNING war (v1.8 has window.location.href) ===")
print(run("docker cp cas-sso:/app/cas.war /tmp/live_cas.war 2>&1 && echo COPIED"))
# analyze with python on the box? simpler: grep for the literal bytecode string in the war zip entry
print(run("docker exec cas-sso sh -c \"cd /tmp && python3 - <<'PY'\nimport zipfile\nz=zipfile.ZipFile('/tmp/live_cas.war')\nc=z.read('WEB-INF/classes/org/apereo/cas/web/custom/controller/LoginController.class').decode('latin1')\nprint('has window.location.href :', 'window.location.href' in c)\nprint('has sendRedirect :', 'sendRedirect' in c)\nprint('has text/html :', 'text/html' in c)\nPY\n\" 2>&1 || echo 'python3 not on box'"))
ssh.close()