125*_*748 6 javascript linux ssh node.js google-cloud-platform
我已ssh通过CLI 成功进入Google Cloud Compute,其命令如下:
ssh -i ~/.ssh/my-ssh-key me@ipnumber
Run Code Online (Sandbox Code Playgroud)
但是使用该ssh2模块不会提供任何输出,包括错误.
var fs = require('fs');
var Client = require('ssh2').Client;
var connSettings = {
host: IP, // 'XXX.XXX.XXX.XX'
port: PORT, // XXXX
username: ME,
privateKey: privateKey, //fs.readFileSync(location, 'utf8')
passphrase: passphrase,
password: password
};
var conn = new Client();
conn.on('ready', function() { //first example in README
console.log('Client :: ready');
conn.exec('uptime', function(err, stream) {
if (err) throw err; //nothing
stream.on('close', function(code, signal) {
console.log('Stream :: close :: code: ' + code + ', signal: ' + signal); //nothing
conn.end();
}).on('data', function(data) {
console.log('STDOUT: ' + data); //nothing
}).stderr.on('data', function(data) {
console.log('STDERR: ' + data); //nothing
});
});
})
.on('error', function(err) {
console.error('err', error); //nothing
})
.connect(connSettings);
Run Code Online (Sandbox Code Playgroud)
/var/log/secure当我正在调试节点脚本时我正在拖尾,当我ssh进入并从CLI关闭会话时我可以看到日志条目,但是当我尝试通过节点时什么也没有ssh2.
什么可能导致此连接无声地失败?
更新:我有良好的权限,您的客户端将记录服务器标识字符串,并在连接后立即发送.因此,如果您没有看到该信息,则必须是服务器未发送任何内容的情况.现在,既然您尝试使用CLI SSH并且它可以正常工作,那么一旦我们排除了不可能的情况,唯一剩下的解释(不太可能看起来似乎)是您没有连接到同一服务器/端口.由于某种原因,目标服务器上的端口8080未运行SSH2服务器.
一种可能的解释是:服务器在端口8080上运行其他东西,它允许连接但最初不发送任何东西(例如HTTP服务器).当您使用CLI SSH连接时,您认为它正在使用端口8080,但由于某种原因,ssh_config文件中的指令没有启动,并且CLI SSH连接到真正的SSH服务器,并且工作,而节点SSH连接到不同的服务器,这就是它不起作用的原因.
要检查,请尝试telnet'ting到该服务器的端口8080并验证它是否确实响应了SSH2横幅:
Connected to xxx.xxx.xxx.xxx port 22
Escape character is '^]'.
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8
^C
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)
如果它没有回答 "SSH -..."横幅,我认为这足以证明CLI SSH正在连接其他地方.哪里?要发现这一点,请再次运行带有debug的CLI SSH:
ssh -vvv xxx.xxx.xxx.xxx ... 2>&1 | grep "Connecting to"
Run Code Online (Sandbox Code Playgroud)
(您必须通过按Ctrl-C退出).这应该给你:
debug1: Connecting to whatever [xxx.xxx.xxx.xxx] port XYZK
Run Code Online (Sandbox Code Playgroud)
并且xxx.xxx.xxx.xxx和XYZK值是您需要传递给node客户端的值.
以前的答案
我不熟悉nodejsSSH2,但我有一个SSH2库(闭源,就在那个)几个月前向我发挥这个诀窍."连接......"后面没有任何内容.
事实证明,客户端使用的是服务器不支持的密码,由于某些原因,OpenSSH2的CLI客户端显示了该密码,因此该库选择不显示错误.深入了解事情是非常混乱的.
我从GitHub页面看到一些密码需要"node v0.11.12或更新".这是你的情况吗?如果没有,您可能想尝试更新node.
在任何情况下,我都会遵循@AttRigh的建议,并在调试模式下在服务器上运行sshd.如果你不能:
此外,现在我开始考虑它,您可以使用默认设置设置sshd服务器,并确保您可以连接到该服务器.这会在一定程度上限制问题.