Add initial sshfs support
This commit is contained in:
+17
-3
@@ -13,6 +13,7 @@ const assert = require('assert'),
|
||||
ejs = require('ejs'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
paths = require('./paths.js'),
|
||||
safe = require('safetydance'),
|
||||
shell = require('./shell.js');
|
||||
|
||||
@@ -39,6 +40,13 @@ function validateMountOptions(type, options) {
|
||||
if (typeof options.host !== 'string') return new BoxError(BoxError.BAD_FIELD, 'host is not a string');
|
||||
if (typeof options.remoteDir !== 'string') return new BoxError(BoxError.BAD_FIELD, 'remoteDir is not a string');
|
||||
return null;
|
||||
case 'sshfs':
|
||||
if (typeof options.user !== 'string') return new BoxError(BoxError.BAD_FIELD, 'user is not a string');
|
||||
if (typeof options.privateKey !== 'string') return new BoxError(BoxError.BAD_FIELD, 'privateKey is not a string');
|
||||
if (typeof options.port !== 'number') return new BoxError(BoxError.BAD_FIELD, 'port is not a number');
|
||||
if (typeof options.host !== 'string') return new BoxError(BoxError.BAD_FIELD, 'host is not a string');
|
||||
if (typeof options.remoteDir !== 'string') return new BoxError(BoxError.BAD_FIELD, 'remoteDir is not a string');
|
||||
return null;
|
||||
case 'ext4':
|
||||
if (typeof options.diskPath !== 'string') return new BoxError(BoxError.BAD_FIELD, 'diskPath is not a string');
|
||||
return null;
|
||||
@@ -72,9 +80,15 @@ async function writeMountFile(volume) {
|
||||
options = 'discard,defaults,noatime';
|
||||
break;
|
||||
case 'sshfs':
|
||||
// type = 'sshfs';
|
||||
// What={{ USER }}@{{ HOST }}:{{ REMOTE DIR }}
|
||||
// Options=_netdev,allow_other,IdentityFile=/home/{{ MY LOCAL USER WITH SSH KEY IN ITS HOME DIRECTORY }}/.ssh/id_rsa,reconnect,x-systemd.automount,uid=1000,gid=1000
|
||||
const keyFilePath = path.join(paths.SSHFS_KEYS_DIR, `id_rsa_${mountOptions.host}`);
|
||||
|
||||
safe.fs.mkdirSync(paths.SSHFS_KEYS_DIR);
|
||||
if (!safe.fs.writeFileSync(keyFilePath, mountOptions.privateKey, { mode: 0o600 })) throw new BoxError(BoxError.FS_ERROR, safe.error);
|
||||
|
||||
type = 'fuse.sshfs';
|
||||
what= `${mountOptions.user}@${mountOptions.host}:${mountOptions.remoteDir}`;
|
||||
options = `defaults,allow_other,port=${mountOptions.port},IdentityFile=${keyFilePath},reconnect,uid=yellowtent,gid=yellowtent`;
|
||||
break;
|
||||
}
|
||||
|
||||
const mountFileContents = ejs.render(SYSTEMD_MOUNT_EJS, { name, what, where: hostPath, options, type });
|
||||
|
||||
Reference in New Issue
Block a user