Files
CasSsoService/docker/login_debug.py
T

40 lines
2.3 KiB
Python

import urllib.request, ssl, paramiko, json, base64, bcrypt, socket
from cryptography.hazmat.primitives.serialization import load_der_public_key
from cryptography.hazmat.primitives.asymmetric import padding
BASE="http://sso.yunhaixingtong.com"; HOST="sso.yunhaixingtong.com"; PORT=80
ctx=ssl.create_default_context(); ctx.check_hostname=False; ctx.verify_mode=ssl.CERT_NONE
PLAIN="SsoTest@2026"
h=bcrypt.hashpw(PLAIN.encode(), bcrypt.gensalt(rounds=10)).decode()
if h.startswith("$2b$"): h=h.replace("$2b$","$2a$",1)
print("hash self-check (python):", bcrypt.checkpw(PLAIN.encode(), h.encode()))
ssh=paramiko.SSHClient(); ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.10.157", port=22, username="yunhai", password="123456", timeout=20)
def run(c):
i,o,e=ssh.exec_command(c); return o.read().decode('utf-8','ignore')+("ERR:"+e.read().decode('utf-8','ignore') if e.read() else "")
PWD="CVf^x$sW*b6CGHxh"; USER="ssotest_tmp"
run(f"docker exec mysql8 mysql -uroot -p'{PWD}' bsch_userbase -e \"DELETE FROM sys_user WHERE username='{USER}'; INSERT INTO sys_user(username,create_time,create_user,password,disabled,expired) VALUES('{USER}',NOW(),0,'{h}',0,0);\" 2>&1")
pub=json.loads(urllib.request.urlopen(urllib.request.Request(BASE+"/api/public-key"),timeout=20,context=ctx).read().decode())["data"]["publicKey"]
rsa_pub=load_der_public_key(base64.b64decode(pub))
def rsa_enc(s): return base64.b64encode(rsa_pub.encrypt(s.encode(), padding.PKCS1v15())).decode()
body=f"loginname={rsa_enc(USER)}&pwd={rsa_enc(PLAIN)}"
req="POST /api/login HTTP/1.1\r\nHost: %s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\nConnection: close\r\n\r\n%s"%(HOST,len(body),body)
s=socket.create_connection((HOST,PORT),timeout=20); s.sendall(req.encode())
data=b""
while True:
c=s.recv(4096)
if not c: break
data+=c
s.close()
print("\nRESPONSE HEAD:\n", data.decode('utf-8','ignore').split("\r\n\r\n",1)[0][:600])
# fetch logs mentioning ssotest_tmp
print("\n=== CAS logs (ssotest_tmp) ===")
logs=run("docker logs --tail 60 cas-sso 2>&1 | grep -i 'ssotest_tmp\\|尝试登录\\|密码错误\\|Padding\\|Decryption\\|Illegal' | tail -20")
print(logs if logs.strip() else "(no matching lines)")
run(f"docker exec mysql8 mysql -uroot -p'{PWD}' bsch_userbase -e \"DELETE FROM sys_user WHERE username='{USER}';\" 2>&1")
ssh.close()