Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/wwwroot/mifepriston.org/node_modules/ssh2/examples/ |
Upload File : |
var constants = require('constants'); var fs = require('fs'); var ssh2 = require('ssh2'); var OPEN_MODE = ssh2.SFTP_OPEN_MODE; var STATUS_CODE = ssh2.SFTP_STATUS_CODE; new ssh2.Server({ hostKeys: [fs.readFileSync('host.key')] }, function(client) { console.log('Client connected!'); client.on('authentication', function(ctx) { if (ctx.method === 'password' && ctx.username === 'foo' && ctx.password === 'bar') ctx.accept(); else ctx.reject(['password']); }).on('ready', function() { console.log('Client authenticated!'); client.on('session', function(accept, reject) { var session = accept(); session.on('sftp', function(accept, reject) { console.log('Client SFTP session'); var openFiles = {}; var handleCount = 0; // `sftpStream` is an `SFTPStream` instance in server mode // see: https://github.com/mscdex/ssh2-streams/blob/master/SFTPStream.md var sftpStream = accept(); sftpStream.on('OPEN', function(reqid, filename, flags, attrs) { console.log('OPEN', filename); // only allow opening /tmp/foo.txt for writing if (filename !== '/tmp/foo.txt' || !(flags & OPEN_MODE.READ)) return sftpStream.status(reqid, STATUS_CODE.FAILURE); // create a fake handle to return to the client, this could easily // be a real file descriptor number for example if actually opening // the file on the disk var handle = new Buffer(4); openFiles[handleCount] = { read: false }; handle.writeUInt32BE(handleCount++, 0, true); sftpStream.handle(reqid, handle); console.log('Opening file for read') }).on('READ', function(reqid, handle, offset, length) { if (handle.length !== 4 || !openFiles[handle.readUInt32BE(0, true)]) return sftpStream.status(reqid, STATUS_CODE.FAILURE); // fake the read var state = openFiles[handle.readUInt32BE(0, true)]; if (state.read) sftpStream.status(reqid, STATUS_CODE.EOF); else { state.read = true; sftpStream.data(reqid, 'bar'); console.log('Read from file at offset %d, length %d', offset, length); } }).on('CLOSE', function(reqid, handle) { var fnum; if (handle.length !== 4 || !openFiles[(fnum = handle.readUInt32BE(0, true))]) return sftpStream.status(reqid, STATUS_CODE.FAILURE); delete openFiles[fnum]; sftpStream.status(reqid, STATUS_CODE.OK); console.log('Closing file'); }).on('REALPATH', function(reqid, path) { var name = [{ filename: '/tmp/foo.txt', longname: '-rwxrwxrwx 1 foo foo 3 Dec 8 2009 foo.txt', attrs: {} }]; sftpStream.name(reqid, name); }).on('STAT', onSTAT) .on('LSTAT', onSTAT); function onSTAT(reqid, path) { if (path !== '/tmp/foo.txt') return sftpStream.status(reqid, STATUS_CODE.FAILURE); var mode = constants.S_IFREG; // Regular file mode |= constants.S_IRWXU; // read, write, execute for user mode |= constants.S_IRWXG; // read, write, execute for group mode |= constants.S_IRWXO; // read, write, execute for other sftpStream.attrs(reqid, { mode: mode, uid: 0, gid: 0, size: 3, atime: Date.now(), mtime: Date.now() }); } }); }); }).on('end', function() { console.log('Client disconnected'); }); }).listen(0, '127.0.0.1', function() { console.log('Listening on port ' + this.address().port); });