Full blog engine source: build_blog.py, content, deploy scripts
This commit is contained in:
118
add_robots_v2.py
Normal file
118
add_robots_v2.py
Normal file
@ -0,0 +1,118 @@
|
||||
"""Safely add robots.txt location block to gfil-lab.com Nginx config"""
|
||||
import paramiko
|
||||
import os
|
||||
|
||||
JD_HOST = "111.228.37.165"
|
||||
JD_USER = "root"
|
||||
JD_PASS = "Liudecai110"
|
||||
|
||||
LAB_HOST = "216.144.233.14"
|
||||
LAB_USER = "root"
|
||||
LAB_PASS = "Kt9V72Tx2c48ChikKU"
|
||||
|
||||
# Write the Python fix script to a temp file
|
||||
FIX_SCRIPT = r'''
|
||||
import shutil
|
||||
src = "/etc/nginx/sites-enabled/gfil"
|
||||
bak = "/etc/nginx/sites-enabled/gfil.bak.before-robots"
|
||||
shutil.copy2(src, bak)
|
||||
|
||||
with open(src, "r") as f:
|
||||
content = f.read()
|
||||
|
||||
robots_block = " location = /robots.txt {\n alias /var/www/gfil-lab/robots.txt;\n default_type text/plain;\n }\n\n"
|
||||
|
||||
if "robots.txt" not in content:
|
||||
content = content.replace(" location / {", robots_block + " location / {")
|
||||
with open(src, "w") as f:
|
||||
f.write(content)
|
||||
print("INSERTED")
|
||||
else:
|
||||
print("ALREADY_EXISTS")
|
||||
'''
|
||||
|
||||
# Write script locally
|
||||
script_path = os.path.join(os.environ.get("TEMP", "/tmp"), "fix_nginx.py")
|
||||
with open(script_path, "w") as f:
|
||||
f.write(FIX_SCRIPT)
|
||||
|
||||
jd = paramiko.SSHClient()
|
||||
jd.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
jd.connect(JD_HOST, port=22, username=JD_USER, password=JD_PASS,
|
||||
timeout=20, banner_timeout=60, allow_agent=False, look_for_keys=False)
|
||||
|
||||
# Upload fix script to JD Cloud
|
||||
sftp = jd.open_sftp()
|
||||
sftp.put(script_path, "/tmp/fix_nginx.py")
|
||||
sftp.close()
|
||||
|
||||
# SCP to gfil-lab server, run, verify
|
||||
cmd = f"""sshpass -p '{LAB_PASS}' ssh -o StrictHostKeyChecking=no {LAB_USER}@{LAB_HOST} '
|
||||
# Copy fix script from JD Cloud
|
||||
echo "Step 1: Upload fix script..."
|
||||
cat /dev/null # placeholder
|
||||
|
||||
# Actually the script is on JD Cloud, need to scp it first
|
||||
'"""
|
||||
|
||||
# Two-step: first scp script to target, then run it
|
||||
scp_cmd = f"sshpass -p '{LAB_PASS}' scp -o StrictHostKeyChecking=no /tmp/fix_nginx.py {LAB_USER}@{LAB_HOST}:/tmp/fix_nginx.py"
|
||||
stdin, stdout, stderr = jd.exec_command(scp_cmd, timeout=15)
|
||||
stdout.channel.recv_exit_status()
|
||||
print(f"SCP: done")
|
||||
|
||||
# Now run it on target
|
||||
run_cmd = f"""sshpass -p '{LAB_PASS}' ssh -o StrictHostKeyChecking=no {LAB_USER}@{LAB_HOST} '
|
||||
echo "=== Running fix script ==="
|
||||
python3 /tmp/fix_nginx.py
|
||||
|
||||
echo "=== Updated config ==="
|
||||
cat /etc/nginx/sites-enabled/gfil
|
||||
|
||||
echo "=== Nginx test ==="
|
||||
nginx -t 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
systemctl reload nginx
|
||||
echo "SUCCESS: Nginx reloaded"
|
||||
else
|
||||
echo "FAILED: rolling back"
|
||||
cp /etc/nginx/sites-enabled/gfil.bak.before-robots /etc/nginx/sites-enabled/gfil
|
||||
nginx -t 2>&1 && systemctl reload nginx
|
||||
echo "Rolled back"
|
||||
fi
|
||||
|
||||
echo "=== Site check ==="
|
||||
curl -s -o /dev/null -w "Site: HTTP %{http_code}" http://localhost/ 2>/dev/null
|
||||
echo ""
|
||||
|
||||
echo "=== robots.txt check ==="
|
||||
curl -s http://localhost/robots.txt 2>/dev/null | head -8
|
||||
|
||||
rm -f /tmp/fix_nginx.py
|
||||
'"""
|
||||
stdin, stdout, stderr = jd.exec_command(run_cmd, timeout=30)
|
||||
print(stdout.read().decode())
|
||||
jd.close()
|
||||
|
||||
# External verify
|
||||
print("\n=== External verification ===")
|
||||
import urllib.request
|
||||
for domain in ['gfil-lab.com', 'gfil-intel.xyz']:
|
||||
try:
|
||||
req = urllib.request.Request(f'https://{domain}/robots.txt',
|
||||
headers={'User-Agent': 'Mozilla/5.0'})
|
||||
r = urllib.request.urlopen(req, timeout=10)
|
||||
content = r.read().decode()
|
||||
has_gptbot = 'GPTBot' in content
|
||||
print(f" {domain}: {r.status} | GPTBot={has_gptbot} | {len(content)} chars")
|
||||
except Exception as e:
|
||||
print(f" {domain}: {e}")
|
||||
|
||||
# Also verify main site still works
|
||||
try:
|
||||
req = urllib.request.Request('https://gfil-lab.com/',
|
||||
headers={'User-Agent': 'Mozilla/5.0'})
|
||||
r = urllib.request.urlopen(req, timeout=10)
|
||||
print(f" gfil-lab.com homepage: {r.status} OK")
|
||||
except Exception as e:
|
||||
print(f" gfil-lab.com homepage: ERROR {e}")
|
||||
Reference in New Issue
Block a user