|
<html> |
|
<head> |
|
<title>SSH Terminal</title> |
|
<link rel="stylesheet" href="/xterm.css" /> |
|
<script src="/xterm.js"></script> |
|
<script src="/xterm-addon-fit.js"></script> |
|
<script src="/socket.io/socket.io.js"></script> |
|
<script> |
|
window.addEventListener('load', function() { |
|
var terminalContainer = document.getElementById('terminal-container'); |
|
const term = new Terminal({ cursorBlink: true }); |
|
const fitAddon = new FitAddon.FitAddon(); |
|
term.loadAddon(fitAddon); |
|
term.open(terminalContainer); |
|
fitAddon.fit(); |
|
|
|
var socket = io() |
|
socket.on('connect', function() { |
|
term.write('\r\n*** Connected to backend ***\r\n'); |
|
}); |
|
|
|
|
|
term.onKey(function (ev) { |
|
socket.emit('data', ev.key); |
|
}); |
|
|
|
|
|
socket.on('data', function(data) { |
|
term.write(data); |
|
}); |
|
|
|
socket.on('disconnect', function() { |
|
term.write('\r\n*** Disconnected from backend ***\r\n'); |
|
}); |
|
}, false); |
|
</script> |
|
<style> |
|
body { |
|
font-family: helvetica, sans-serif, arial; |
|
font-size: 1em; |
|
color: #111; |
|
} |
|
h1 { |
|
text-align: center; |
|
} |
|
#terminal-container { |
|
width: 960px; |
|
height: 600px; |
|
margin: 0 auto; |
|
padding: 2px; |
|
} |
|
#terminal-container .terminal { |
|
background-color: #111; |
|
color: #fafafa; |
|
padding: 2px; |
|
} |
|
#terminal-container .terminal:focus .terminal-cursor { |
|
background-color: #fafafa; |
|
} |
|
</style> |
|
</head> |
|
<body> |
|
<h3>WebSSH</h3> |
|
<div id="terminal-container"></div> |
|
</body> |
|
</html> |