2016-08-01 5 views
6

मैं वेब एक सवाल जो मैं आसान होगा सोचा था जवाब देने के लिए की तलाश में के चेहरे परिशोध की है। मेरा लक्ष्य सीधे आगे है। मैं Node.js मॉड्यूल का उपयोग कर एक साधारण वेब-आधारित एसएसएच क्लाइंट बनाना चाहता हूं। अगर मैं नोड सर्वर से कनेक्ट करना चाहता हूं तो मुझे कई विकल्प मिल गए हैं, लेकिन रिमोट सर्वर से कनेक्ट करने के किसी भी उदाहरण को नहीं मिल रहा है। वेब सर्वर से कनेक्ट करें सर्वर मैंदूरस्थ SSH सर्वर से कनेक्ट हो (Node.js/एचटीएमएल 5 के माध्यम से सांत्वना)

केवल एक चीज पर क्लिक किया SSH सत्र दर्ज करें> - -> सर्वर की सूची में एक सर्वर नाम पर क्लिक करें:

अनिवार्य रूप से परिणाम मैं देख रहा हूँ इस तरह एक कार्यप्रवाह है मैंने पाया है कि जो भी मैं ढूंढ रहा हूं उसके करीब भी दूरस्थ रूप से करीब guacamole है। मैं guacamole का उपयोग नहीं करना चाहता, हालांकि, मैं चाहता हूं कि यह एप्लिकेशन ओएस स्वतंत्र हो। वर्तमान में मैं इसे विंडोज़ 10 प्लेटफॉर्म पर बना रहा हूं, और इसे पूरा होने पर फेडोरा को बंद कर दूंगा।

मैं creating an SSH terminal के लिए इस ट्यूटोरियल पाया। हालांकि, यह सब स्थानीय सिस्टम के लिए एक एसएसएच कनेक्शन बनाता है (या बनाने का प्रयास करता है) बनाता है।

एक और विकल्प है कि पूरी तरह से शानदार देखा tty.js था। हां, नीचे की रेखा उपरोक्त ट्यूटोरियल के समान है। मॉड्यूल केवल आपको node.js सर्वर से कनेक्ट करने की अनुमति देता है, दूरस्थ सर्वर पर नहीं।

किसी के पास इस लक्ष्य के संभावित पथ पर जानकारी है?

उत्तर

18

यह ssh2, xterm, और socket.io जैसे मॉड्यूल के साथ आसानी से करने योग्य है।

  1. npm install ssh2 xterm socket.io
  2. index.html बनाएँ::

    यहाँ एक उदाहरण है

<html> 
    <head> 
    <title>SSH Terminal</title> 
    <link rel="stylesheet" href="/src/xterm.css" /> 
    <script src="/src/xterm.js"></script> 
    <script src="/addons/fit/fit.js"></script> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
     window.addEventListener('load', function() { 
     var terminalContainer = document.getElementById('terminal-container'); 
     var term = new Terminal({ cursorBlink: true }); 
     term.open(terminalContainer); 
     term.fit(); 

     var socket = io.connect(); 
     socket.on('connect', function() { 
      term.write('\r\n*** Connected to backend***\r\n'); 

      // Browser -> Backend 
      term.on('data', function(data) { 
      socket.emit('data', data); 
      }); 

      // Backend -> Browser 
      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> 
    <div id="terminal-container"></div> 
    </body> 
</html> 
  1. बनाएं server.js:
var fs = require('fs'); 
var path = require('path'); 
var server = require('http').createServer(onRequest); 

var io = require('socket.io')(server); 
var SSHClient = require('ssh2').Client; 

// Load static files into memory 
var staticFiles = {}; 
var basePath = path.join(require.resolve('xterm'), '..'); 
[ 'addons/fit/fit.js', 
    'src/xterm.css', 
    'src/xterm.js' 
].forEach(function(f) { 
    staticFiles['/' + f] = fs.readFileSync(path.join(basePath, f)); 
}); 
staticFiles['/'] = fs.readFileSync('index.html'); 

// Handle static file serving 
function onRequest(req, res) { 
    var file; 
    if (req.method === 'GET' && (file = staticFiles[req.url])) { 
    res.writeHead(200, { 
     'Content-Type': 'text/' 
         + (/css$/.test(req.url) 
         ? 'css' 
         : (/js$/.test(req.url) ? 'javascript' : 'html')) 
    }); 
    return res.end(file); 
    } 
    res.writeHead(404); 
    res.end(); 
} 

io.on('connection', function(socket) { 
    var conn = new SSHClient(); 
    conn.on('ready', function() { 
    socket.emit('data', '\r\n*** SSH CONNECTION ESTABLISHED ***\r\n'); 
    conn.shell(function(err, stream) { 
     if (err) 
     return socket.emit('data', '\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n'); 
     socket.on('data', function(data) { 
     stream.write(data); 
     }); 
     stream.on('data', function(d) { 
     socket.emit('data', d.toString('binary')); 
     }).on('close', function() { 
     conn.end(); 
     }); 
    }); 
    }).on('close', function() { 
    socket.emit('data', '\r\n*** SSH CONNECTION CLOSED ***\r\n'); 
    }).on('error', function(err) { 
    socket.emit('data', '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n'); 
    }).connect({ 
    host: '192.168.100.105', 
    username: 'foo', 
    password: 'barbaz' 
    }); 
}); 

server.listen(8000); 
  1. संपादित SSH सर्वर विन्यास आपके ब्राउज़र में में server.js
  2. node server.js
  3. जाएँ http://localhost:8000.connect() के लिए पारित
+1

Dude, तो आप पूरी तरह से चट्टान की तरह का पता चलता है! :) – Ethan

+1

आरडीपी और वीएनसी के लिए कुछ समान नहीं होता है? :) – Ethan

+0

वीएनसी के लिए एक त्वरित खोज [यह] (http://blog.mgechev.com/2013/08/30/vnc-javascript-nodejs/) बदल जाती है। यह थोड़ा पुराना है और थोड़ा अनुकूलित करने के लिए खड़ा हो सकता है, लेकिन यह अभी भी काम कर सकता है। जहां तक ​​आरडीपी चला जाता है, मैंने अभी तक नोड के लिए आरडीपी कार्यान्वयन/बाध्यकारी नहीं देखा है। – mscdex

0

भी noVnc की कोशिश करो। हालांकि, xterm.js के पृष्ठ के भीतर एक छोटे से खुदाई अन्य समाधान,

WebSSH2

संबंधित मुद्दे