admin.html 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. {% extends 'base.html' %}
  2. {% block head %}
  3. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@5.3.0/css/xterm.css" />
  4. <script src="https://cdn.jsdelivr.net/npm/xterm@5.3.0/lib/xterm.js"></script>
  5. <script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.8.0/lib/xterm-addon-fit.js"></script>
  6. <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script>
  7. {% endblock %}
  8. {% block content %}
  9. <div class="container-fluid mt-4">
  10. <div class="row">
  11. <div class="col-md-8">
  12. <div class="card">
  13. <div class="card-header bg-dark text-white">
  14. SSH Console
  15. </div>
  16. <div class="card-body p-0">
  17. <div id="terminal" style="height: 500px;"></div>
  18. </div>
  19. </div>
  20. </div>
  21. <div class="col-md-4">
  22. <div class="card mb-3">
  23. <div class="card-header bg-info text-white">
  24. Conexión SSH
  25. </div>
  26. <div class="card-body">
  27. <form id="ssh-form">
  28. <div class="mb-2">
  29. <label>Host</label>
  30. <input type="text" class="form-control" id="host" value="localhost">
  31. </div>
  32. <div class="mb-2">
  33. <label>Port</label>
  34. <input type="number" class="form-control" id="port" value="22">
  35. </div>
  36. <div class="mb-2">
  37. <label>Username</label>
  38. <input type="text" class="form-control" id="username" placeholder="root">
  39. </div>
  40. <div class="mb-2">
  41. <label>Password</label>
  42. <input type="password" class="form-control" id="password">
  43. </div>
  44. <button type="submit" class="btn btn-primary w-100">Conectar</button>
  45. </form>
  46. <div id="status" class="mt-2"></div>
  47. </div>
  48. </div>
  49. <div class="card">
  50. <div class="card-header bg-warning">
  51. Credenciales
  52. </div>
  53. <div class="card-body">
  54. <h2>IP: 167.99.161.63</h2>
  55. <h6>Credenciales SSH</h6>
  56. <p><strong>User:</strong> root<br>
  57. <strong>Pass:</strong>solarEn2026EsTodo</p>
  58. <hr>
  59. <h6>Credenciales PostgreSQL</h6>
  60. <p><strong>User:</strong> postgres<br>
  61. <strong>Pass:</strong>solarEn2026EsTodo</p>
  62. <hr>
  63. <h6>Comandos PostgreSQL</h6>
  64. <ol class="ps-3 mb-0">
  65. <li class="mb-2">
  66. <strong>Entrar a consola:</strong><br>
  67. <code>sudo -u postgres psql</code>
  68. </li>
  69. <li class="mb-2">
  70. <strong>Seleccionar DB:</strong><br>
  71. <code>\c solarcalc</code>
  72. </li>
  73. <li class="mb-2">
  74. <strong>Consultar tablas:</strong><br>
  75. <code>\dt</code>
  76. </li>
  77. <li>
  78. <strong>Ejemplo consulta:</strong><br>
  79. <code>select * from casas;</code>
  80. </li>
  81. </ol>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <script>
  88. const socket = io('/ssh');
  89. const term = new Terminal({
  90. cursorBlink: true,
  91. theme: {
  92. background: '#1e1e1e'
  93. }
  94. });
  95. const fitAddon = new FitAddon.FitAddon();
  96. term.loadAddon(fitAddon);
  97. term.open(document.getElementById('terminal'));
  98. fitAddon.fit();
  99. window.addEventListener('resize', () => fitAddon.fit());
  100. term.onData(data => {
  101. socket.emit('ssh_input', {data: data});
  102. });
  103. socket.on('ssh_output', function(msg) {
  104. term.write(msg.data);
  105. });
  106. socket.on('ssh_status', function(msg) {
  107. const statusDiv = document.getElementById('status');
  108. if (msg.status === 'connected') {
  109. statusDiv.innerHTML = '<span class="text-success">Conectado</span>';
  110. term.focus();
  111. } else {
  112. statusDiv.innerHTML = '<span class="text-danger">Error: ' + msg.message + '</span>';
  113. }
  114. });
  115. document.getElementById('ssh-form').addEventListener('submit', function(e) {
  116. e.preventDefault();
  117. const host = document.getElementById('host').value;
  118. const port = document.getElementById('port').value;
  119. const username = document.getElementById('username').value;
  120. const password = document.getElementById('password').value;
  121. document.getElementById('status').innerHTML = '<span class="text-warning">Conectando...</span>';
  122. term.clear();
  123. socket.emit('start_ssh', {
  124. host: host,
  125. port: port,
  126. username: username,
  127. password: password
  128. });
  129. });
  130. </script>
  131. {% endblock %}