Browse Source

ensure command is passed correctly

pull/126/head
butlerx 6 years ago
parent
commit
0378c63617
No known key found for this signature in database GPG Key ID: B37CA765BAA89170
  1. 2
      .babelrc
  2. 2
      index.js
  3. 24
      src/server/command.ts

2
.babelrc

@ -3,7 +3,7 @@
"@babel/preset-typescript",
["@babel/env"]
],
"compact": true
"compact": true,
"plugins": [
"lodash"
]

2
index.js

@ -79,7 +79,7 @@ if (require.main === module) {
alias: 'c',
description: 'command to run in shell',
type: 'string',
default: process.env.COMMAND || 'command',
default: process.env.COMMAND || 'login',
},
help: {
demand: false,

24
src/server/command.ts

@ -33,7 +33,7 @@ export default (
? loginOptions(command, remoteAddress)
: sshOptions(
urlArgs(referer, {
ssh: address(referer, user, host),
host: address(referer, user, host),
port: `${port}`,
pass,
command,
@ -48,30 +48,38 @@ export default (
address(referer, user, host).includes('@'),
});
function parseCommand(command: string, path?: string): string {
if (command === 'login' && path === undefined) return '';
return path !== undefined
? `$SHELL -c "cd ${path};${command === 'login' ? '$SHELL' : command}"`
: command;
}
function sshOptions(
{ pass, path, command, ssh, port, auth }: { [s: string]: string },
{ pass, path, command, host, port, auth }: { [s: string]: string },
key?: string
): string[] {
const cmd = parseCommand(command, path);
const sshRemoteOptsBase = [
'ssh',
ssh,
host,
'-t',
'-p',
port,
'-o',
`PreferredAuthentications=${auth}`,
path !== undefined
? `$SHELL -c "cd ${path};${command === 'login' ? '$SHELL' : command}"`
: command,
];
if (key) {
return sshRemoteOptsBase.concat(['-i', key]);
return sshRemoteOptsBase.concat(['-i', key, cmd]);
}
if (pass) {
return ['sshpass', '-p', pass].concat(sshRemoteOptsBase);
return ['sshpass', '-p', pass].concat(sshRemoteOptsBase, [cmd]);
}
if (cmd === '') {
return sshRemoteOptsBase;
}
return sshRemoteOptsBase.concat([cmd]);
}
function loginOptions(command: string, remoteAddress: string): string[] {
return command === 'login'

Loading…
Cancel
Save