import paramiko, sys, time
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('101.79.17.164', username='root', password='1q2w3e!Q', timeout=15)
def run(label, cmd, timeout=30):
print(f'\n[{label}]')
_, o, e = client.exec_command(cmd, timeout=timeout)
print(o.read().decode('utf-8', errors='replace').strip()[:400])
run('Jenkins 사용자 목록', 'ls /var/lib/jenkins/users/ 2>/dev/null')
run('admin 사용자 설정', 'cat /var/lib/jenkins/users/admin_*/config.xml 2>/dev/null | head -20')
run('Security Realm', 'grep -A5 "securityRealm" /var/lib/jenkins/config.xml 2>/dev/null | head -10')
# Jenkins 보안을 임시 비활성화 후 비밀번호 재설정
run('보안 임시 비활성화', """
# config.xml에서 useSecurity를 false로 변경
sed -i 's|true|false|' /var/lib/jenkins/config.xml
echo "보안 비활성화"
grep "useSecurity" /var/lib/jenkins/config.xml
""")
run('Jenkins 재시작', 'systemctl restart jenkins && sleep 8 && systemctl is-active jenkins')
# 보안 비활성화 상태에서 비밀번호 재설정 Groovy 스크립트 실행
run('API 확인 (보안 비활성화)', """
HTTP=$(curl -sf -o /dev/null -w "%{http_code}" http://127.0.0.1:9080/api/json 2>/dev/null)
echo "HTTP: $HTTP"
""")
run('admin 비밀번호 재설정', """
# Jenkins Script Console을 통해 비밀번호 재설정
curl -sf -X POST http://127.0.0.1:9080/scriptText \
--data-urlencode 'script=
import jenkins.model.*
import hudson.security.*
def instance = Jenkins.getInstance()
def realm = new HudsonPrivateSecurityRealm(false)
realm.createAccount("admin", "Admin@2026!")
instance.setSecurityRealm(realm)
def strategy = new FullControlOnceLoggedInAuthorizationStrategy()
strategy.setAllowAnonymousRead(false)
instance.setAuthorizationStrategy(strategy)
instance.setSecurityEnabled(true)
instance.save()
println "done"
' 2>/dev/null
""")
run('보안 재활성화 확인', """
grep "useSecurity" /var/lib/jenkins/config.xml
""")
run('Jenkins 재시작', 'systemctl restart jenkins && sleep 8 && systemctl is-active jenkins')
client.close()