【问题标题】:Nodejs ssh2, how to connect when I don't have the keysNodejs ssh2,当我没有密钥时如何连接
【发布时间】:2014-05-09 17:59:00
【问题描述】:

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

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

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

谁能帮助让我知道(并理解)我是否以及如何让它发挥作用?

谢谢!

【问题讨论】:

  • 没有用户?您是否在 PuTTY 配置(连接->数据)中设置了默认用户?您是使用 ssh-agent 或 Pageant 进行身份验证,还是在 PuTTY 配置中设置了私钥(Connection->SSH->Auth)?
  • 我有同样的设置和同样的问题。登录 SSH 服务器不需要用户名,也不需要私钥。唯一的要求是在 Putty 中接受服务器指纹,然后我得到连接。 Connection->Data 中的用户为空,Putty 中没有设置私钥。我在 ssh2 中遇到与 TS 相同的错误。
  • 您必须使用 telnet 或其他方式,因为 ssh 需要一个用户名(来自某个地方),并且 ssh2 模块如果它是一个实际的 ssh 服务器不会给您握手超时错误消息(除非连接速度非常慢)。
  • 不,它是一个 SSH 服务器...我注意到我可以提供任何用户名,甚至是一个空格,并且会获得连接。添加了代码作为如何通过下面的 shell 连接的答案。

标签: node.js ssh


【解决方案1】:

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: ''
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 2019-07-18
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多