我想写一个npm脚本来执行ssh shell命令。目前它正在通过执行osascript
命令来打开终端窗口并运行该命令。从npm命令执行ssh shell脚本
我想改变它来执行当前终端的命令。该脚本包括shelljs
和executive
。当我使用executive
时,脚本没有发生任何事情。随着shelljs
我得到:
Pseudo-terminal will not be allocated because stdin is not a terminal. the input device is not a TTY
正在执行的命令是:ssh -i [ssh-key] -t [email protected][ip-address] eval $(base64 -D <<< [command in base64])
基于64位指令sudo docker exec -i -t $(sudo docker ps -aqf "ancestor=' + containerName + '") /bin/bash
如果我输出的命令和复制和粘贴,因为预期它会工作,进入远程机器并运行docker exec
命令。
如果我删除-t
选项,我不会收到警告消息,但控制台中没有输出并且脚本挂起(我假设它在后台运行没有输出的命令)。如果我删除eval ...
部分,我会得到一个输出,看起来像您在切换到服务器时看到的内容,但没有输入终端。
我该怎么做才能在同一个终端或新选项卡中执行此命令。如果我必须使用osascript
命令来执行此操作,那也没关系。不过我会从PhpStorm的终端执行这个命令。
编辑
这里的代码块:
var execCommand = 'sudo docker exec -i -t $(sudo docker ps -aqf "ancestor=nginx") /bin/bash';
var buffer = new Buffer(execCommand);
var encoded = buffer.toString('base64');
var cmd = "ssh -i " + this.keyPath + " -t [email protected]" + ip + " eval $(base64 -D <<< " + encoded + ") ";
shell.exec(cmd);
编辑2
我可以ssh到机器成功,并得到一个命令提示符,但我得到一个当我添加eval
命令时,现在出现the input device is not a TTY
错误。
var docker_exec = 'sudo docker exec -it $(sudo docker ps -aqf "ancestor=' + containerName + '") /bin/bash';
var encoded = new Buffer(docker_exec).toString('base64');
var sshTerm = spawn('ssh', [
'-i',
this.keyPath,
'[email protected]' + ip,
'eval',
'eval $(base64 -D <<< ' + encoded + ')'
], {
stdio: 'inherit',
shell: true
});
sshTerm.on('exit', function() {
process.exit(0);
});
您可以发布您使用的代码吗? –
@TarunLalwani希望可以帮助 – Ethan22