Nodejs ssh2,当我没有密钥时如何连接

时间:2014-05-02 04:06:59

标签: node.js ssh

好的,首先我对SSH的工作原理没有真正的了解......我正在使用https://github.com/mscdex/ssh2/尝试在SSH服务器上对ip进行“查找”。

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

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

任何人都可以帮助让我知道(并了解)我是否以及如何使其发挥作用?

谢谢!

1 个答案:

答案 0 :(得分: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: ''
});