71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
"""Safely add robots.txt location block to gfil-lab.com Nginx config"""
|
|
import paramiko
|
|
|
|
JD_HOST = "111.228.37.165"
|
|
JD_USER = "root"
|
|
JD_PASS = "Liudecai110"
|
|
|
|
LAB_HOST = "216.144.233.14"
|
|
LAB_USER = "root"
|
|
LAB_PASS = "Kt9V72Tx2c48ChikKU"
|
|
|
|
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)
|
|
|
|
# Use python on remote to do precise insertion instead of sed
|
|
cmd = f"""sshpass -p '{LAB_PASS}' ssh -o StrictHostKeyChecking=no {LAB_USER}@{LAB_HOST} '
|
|
# Backup first
|
|
cp /etc/nginx/sites-enabled/gfil /etc/nginx/sites-enabled/gfil.bak.before-robots
|
|
|
|
# Use python to insert robots.txt block precisely before "location / {"
|
|
python3 -c "
|
|
import re
|
|
with open(\"/etc/nginx/sites-enabled/gfil\", \"r\") as f:
|
|
content = f.read()
|
|
|
|
robots_block = \"\"\" location = /robots.txt {
|
|
alias /var/www/gfil-lab/robots.txt;
|
|
default_type text/plain;
|
|
}
|
|
|
|
\"\"\"
|
|
|
|
# Insert before the first \"location / {\"
|
|
if \"robots.txt\" not in content:
|
|
content = content.replace(\" location / {\", robots_block + \" location / {\")
|
|
with open(\"/etc/nginx/sites-enabled/gfil\", \"w\") as f:
|
|
f.write(content)
|
|
print(\"INSERTED robots.txt block\")
|
|
else:
|
|
print(\"robots.txt block already exists, skipping\")
|
|
"
|
|
|
|
# Verify
|
|
echo "=== Updated config ==="
|
|
cat /etc/nginx/sites-enabled/gfil
|
|
|
|
# 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 to original"
|
|
fi
|
|
|
|
# Verify site still works
|
|
curl -s -o /dev/null -w "Site: HTTP %{{http_code}}" http://localhost/ 2>/dev/null
|
|
|
|
# Verify robots.txt
|
|
curl -s http://localhost/robots.txt 2>/dev/null | head -5
|
|
'"""
|
|
stdin, stdout, stderr = jd.exec_command(cmd, timeout=30)
|
|
print(stdout.read().decode())
|
|
jd.close()
|