【发布时间】:2017-09-28 05:43:20
【问题描述】:
我正在使用以下库来做:http://maboiteaspam.github.io/ssh2-utils/
- 登录到 altus 实例
- 转到一个目录。
这是我的代码:
function postRun(url){
ssh.runMultiple(server, "sudo docker exec -it abcas /bin/bash", function(err,stdout,stderr,server,conn){
if(err) console.log(err);
stdout.on('data', function(data){
executeCommands();
});
stderr.on('data', function(data){
console.log(''+data);
});
stdout.on('close',function(data){
conn.end();
});
});
}
function executeCommands(){
ssh.runMultiple(server, ['cd /dependencies/scripts'], function(err,stdout,stderr,server,conn){
if(err) console.log(err);
stdout.on('data', function(data){
ssh.exec(server, 'pwd', function(err,stdout,stderr){
if(err) console.log(err);
});
});
stderr.on('data', function(data){
console.log(''+data);
});
stdout.on('close',function(data){
conn.end();
});
});
}
我收到以下错误:
bash: line 0: cd: /dependencies/scripts: 没有这样的文件或目录
我不确定我做错了什么。我在某处读到需要更改 shell,但看起来我已经在 bash 中了。
我遗漏了什么,请赐教。
【问题讨论】:
-
您正试图进入一个不存在的目录。不要为此责怪 SSH 或 Node... 错误消息告诉您 SSH 命令执行本身确实有效,但结果不成功(即非零返回码)。验证路径 /dependencies/scripts 是否存在。
-
错误来自 bash,而不是来自 ssh。看看你是否可以从命令行 cd /dependencies/scripts。
-
问题是.. 目录存在,我可以 cd 进入目录。 @marekful 这让我很烦恼 :-( 我花了几个小时试图弄清楚发生了什么,然后我放弃了 :-(
-
我明白你的意思了。所以问题是,该目录确实存在。但是,当我从另一个 linux 机器上执行
postRun()时 .. 它应该转到"Inside"一个 docker 实例,然后执行"cd"但它从外部机器上执行cd。 (不在 docker 内部).. 不太确定我应该如何解决这个问题.. 我应该使用ssh.runMultiple? -
一个常见的初学者错误是不理解斜线的意义。目录
/dependencies真的存在于根目录中吗?或者你希望在你的主目录中找到一个目录dependencies(注意没有前导斜杠)?
标签: node.js bash shell libssh2