Ssh- рдЪреИрдЯ, рднрд╛рдЧ 2

рд╣рд╛рдп, рд╣реИрдмреНрд░ред рдпрд╣ ssh- рдЪреИрдЯ рд▓реВрдк рдХрд╛ рд▓реЗрдЦ 2 рд╣реИред


рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ:


  • рдЕрдкрдиреА рдЦреБрдж рдХреА рдбрд┐рдЬрд╝рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВред
  • рдорд╛рд░реНрдХрдбрд╛рдЙрди рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ
  • рдмреЙрдЯ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ
  • рдкрд╛рд╕рд╡рд░реНрдб рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рд╛рдПрдБ (рд╣реИрд╢ рдФрд░ рдирдордХ)
    рдХрд╛рд╢, рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬ рд░рд╣рд╛ рд╣реЛрддрд╛

рдХрд╕реНрдЯрдо рд▓реЗрдЖрдЙрдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБ


рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╕рдорд░реНрдерди:


  • @color
  • @bold
  • @underline
  • @hex
  • @box
    рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:
    рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ methods рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ methods
    рддреЛ рдпрд╣ registerMethod рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛:

 // parserExec.js at end module.exports.registerMethod = function(name, func) { methods[name] = func } 

рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рднреА рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


 // index.js at require part const { registerMethod } = require('./parserExec') // index.js at end module.exports.registerMethod = registerMethod 

рдЕрдм, рдПрдХ рд╕рд░реНрд╡рд░ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рд╕реНрд╡рд░реВрдкрдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 const chat = require('.') const { formatNick } = require('./format') chat({}) chat.registerMethod('hello', function(p, name){ return 'Hi, ' + formatNick(name) + '!' }) 


рдорд╛рд░реНрдХрдбрд╛рдЙрди рд╕рдорд░реНрдерди


рдорд╛рд░реНрдХрдбрд╛рдЙрди рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝реЗрдВ


 // format.js near require const marked = require('marked'); const TerminalRenderer = require('marked-terminal'); marked.setOptions({ renderer: new TerminalRenderer() }); // format.js line 23 message = marked(message) 


рдмреЙрдЯ


рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛


 let writeBotBob = chat.registerBot({ name: 'botBob', onConnect(nick, write){ write('@hello{' + nick + '}') }, onDisconnect(nick, write){}, onMessage(nick, message, write) { if(message == 'botBob!') write('I\'m here') }, onCommand(command, write) { write('Doing ' + command) } }) 

onCommand рдХреЛ @bot(botBob){Command} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


рдмреЙрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ:


 let bots = []; //   let onWrite = () => {}; function getWrite(bot) { //       return msg => { onWrite(bot.name, msg); }; } module.exports.message = function message(nick, message) { // index.js       bots.forEach(bot => { try { bot.onMessage(nick, message, getWrite(bot)); } catch (e) { console.error(e); } }); }; module.exports.connect = function message(nick) { //   bots.forEach(bot => { try { bot.onConnect(nick, getWrite(bot)); } catch (e) { console.error(e); } }); }; module.exports.disConnect = function message(nick) { //   bots.forEach(bot => { try { bot.onDisconnect(nick, message, getWrite(bot)); } catch (e) { console.error(e); } }); }; module.exports.command = function message(name, message) { //    bots.forEach(bot => { if (bot.name == name) { try { bot.onCommand(message, getWrite(bot)); } catch (e) { console.error(e); } } }); }; module.exports.registerBot = function(bot) { bots.push(bot); return getWrite(bot) }; module.exports.onMessage = func => { onWrite = func; }; 


рдмреЙрдЯ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


  • рдореЙрдиреАрдЯрд░ рд▓реЛрдб рдХрд░реЗрдВ
  • рддреИрдирд╛рддреА
  • рдЯрд╛рд╕реНрдХ рдмреЛрд░реНрдб

рд╣реИрд╢ рдФрд░ рдирдордХ


Ssh рдЪрд╛рдмрд┐рдпрд╛рдБ рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдХреНрдпреЛрдВрдХрд┐ ssh рдХреАрдЬрд╝ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреА
рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛


 // crypto.js const crypto = require('crypto'); function genRandomString(length) { return crypto .randomBytes(Math.ceil(length / 2)) .toString('hex') .slice(0, length); } function sha512(password, salt){ const hash = crypto.createHmac('sha512', salt); /** Hashing algorithm sha512 */ hash.update(password); const value = hash.digest('hex'); return value }; function checkPass(pass, obj){ return obj.password == sha512(pass, obj.salt) } function encodePass(pass){ const salt = genRandomString(16) return JSON.stringify({ salt, password: sha512(pass, salt) }) } module.exports.encodePass = encodePass module.exports.checkPass = checkPass 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рд▓рд╛рдореА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢рд┐рдВрдЧ


 // To generate password run node ./encryptPassword password const { encodePass } =require('./crypto') console.log(encodePass(process.argv[2])) 

рд╣рдо users.json рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ lobby.js рдореЗрдВ рддреБрд▓рдирд╛ рдХреЗ рдмрдЬрд╛рдп рд╣рдо checkPassword рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


рдкрд░рд┐рдгрд╛рдо


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдФрд░ рдмреЙрдЯ рдХреЗ рд╕рд╛рде ssh рдЪреИрдЯ рд╣реИред
рдЕрдВрддрд┐рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА

Source: https://habr.com/ru/post/hi467543/


All Articles