2014-05-02 25 views
0

好的,首先我没有真正的洞察SSH的工作原理......我使用https://github.com/mscdex/ssh2/来尝试做一个ip查找“ SSH服务器。Nodejs ssh2,当我没有密钥时如何连接

在Putty中,我只能通过接受服务器密钥(指纹)来连接到SSH服务器而无需用户或密码。

当在ssh2中尝试相同时,我只收到“错误:等待握手时超时”。

任何人都可以帮助让我知道(和理解)是否以及如何让这个工作?

谢谢!

+0

没有用户?您的PuTTY配置(Connection-> Data)中是否设置了默认用户?您是否使用ssh-agent或Pageant进行身份验证,或者您的PuTTY配置(Connection-> SSH-> Auth)中是否设置了私钥? – mscdex

+0

我有相同的设置和相同的问题。没有用户名,也没有私钥需要登录到SSH服务器。 唯一的要求是接受Putty中的服务器指纹,然后获得连接。连接中的用户 - >数据为空,并且在Putty中没有设置私钥。 我在ssh2中得到与TS相同的错误。 – Anders

+0

你必须使用telnet或其他的东西,因为ssh需要一个用户名(来自某处),如果它是一个真正的ssh服务器(除非连接速度非常慢),ssh2模块才会给你提供握手超时错误信息。 – mscdex

回答

0

SSH连接仅使用公钥完成。服务器然后要求输入用户名和密码。 连接后立即将用户名写入流中,然后输入“Enter”,然后输入密码。这让我可以访问服务器,并且可以在下面的情况下触发SSH命令(帮助)。

我希望这可以帮助别人挣扎,因为这是我的第一个Node.js项目,请随时发表评论,并帮助我更好的解决方案,如果你知道一个!

var Connection = require('ssh2'); 

var c = new Connection(); 

c.host = '<ip/host>'; 
c.port = 22; 
c.username = 'user'; 
c.password = 'password'; 

c.on('ready', function() { 
console.log('Connection :: ready'); 
// If we got here we have a connection 
// Start by creating a shell 
c.shell(onShell); 
}); 

var onShell = function(err, stream) { 
if (err != null) { 
    console.log('error: ' + err); 
} 

var cmdcnt = 0; 
stream.on('data', function(data, extended) { 
    //console.log((extended === 'stderr' ? 'STDERR: ' : 'STDOUT: ') + data); 
    console.log('[['+cmdcnt+'] '+data+']'); 

    var str_data = String(data); 

    if (str_data.substr(data.length - 6) == 'xi52# ') { 
     //We are logged in, start sending commands... 
     if (cmdcnt == 2) stream.write('help\r'); 
    } 

    // Set password after login, promtp #1 
    if (cmdcnt == 1) stream.write(c.password+'\r'); 

    // command counter 
    cmdcnt++; 
}); 

stream.on('end', function() { 
    console.log('Stream :: EOF'); 
}); 

stream.on('close', function() { 
    console.log('Stream :: close'); 
}); 

stream.on('exit', function(code, signal) { 
    console.log('Stream :: exit :: code: ' + code + ', signal: ' + signal); 
    c.end(); 
}); 

// Send username at connect 
stream.write(c.username+'\r'); 

//console.log('Shell'); 

} // End onShell function 

c.on('error', function(err) { 
console.log('Connection :: error :: ' + err); 
}); 
c.on('end', function() { 
console.log('Connection :: end'); 
}); 
c.on('close', function(had_error) { 
console.log('Connection :: close'); 
}); 

c.connect({ 
host: c.host, 
port: c.port, 
username: c.username, 
password: '' 
}); 
相关问题