我目前正在尝试第一次将 Meteor 项目部署到外部服务器。该服务器由 DigitalOcean 托管,运行 ubuntu 16.04,并设置了 SSH 密钥以进行无密码访问。
我从 MUP 得到的错误是:
[159.203.165.13] - Setup Docker
events.js:165
throw er; // Unhandled 'error' event
^
Error: All configured authentication methods failed
at tryNextAuth (/usr/lib/node_modules/mup/node_modules/nodemiral/node_modules/ssh2/lib/client.js:290:17)
at SSH2Stream.onUSERAUTH_FAILURE (/usr/lib/node_modules/mup/node_modules/nodemiral/node_modules/ssh2/lib/client.js:469:5)
at SSH2Stream.emit (events.js:180:13)
at parsePacket (/usr/lib/node_modules/mup/node_modules/ssh2-streams/lib/ssh.js:3647:10)
at SSH2Stream._transform (/usr/lib/node_modules/mup/node_modules/ssh2-streams/lib/ssh.js:551:13)
at SSH2Stream.Transform._read (_stream_transform.js:185:10)
at SSH2Stream._read (/usr/lib/node_modules/mup/node_modules/ssh2-streams/lib/ssh.js:212:15)
at SSH2Stream.Transform._write (_stream_transform.js:173:12)
at doWrite (_stream_writable.js:410:12)
at writeOrBuffer (_stream_writable.js:396:5)
at SSH2Stream.Writable.write (_stream_writable.js:294:11)
at Socket.ondata (_stream_readable.js:651:20)
at Socket.emit (events.js:180:13)
at addChunk (_stream_readable.js:274:12)
at readableAddChunk (_stream_readable.js:261:11)
at Socket.Readable.push (_stream_readable.js:218:10)
Emitted 'error' event at:
at tryNextAuth (/usr/lib/node_modules/mup/node_modules/nodemiral/node_modules/ssh2/lib/client.js:292:12)
at SSH2Stream.onUSERAUTH_FAILURE (/usr/lib/node_modules/mup/node_modules/nodemiral/node_modules/ssh2/lib/client.js:469:5)
[... lines matching original stack trace ...]
at Socket.Readable.push (_stream_readable.js:218:10)
此时,我已经根据其他建议尝试了几种涉及 mup 文件的解决方案,例如:
1) 添加密码 - 给出完全相同的错误,就好像未发生更改一样。
2)添加我用于根据数字海洋对服务器进行身份验证的相同 SSH 密钥 - 表示“privateKey 值不包含(有效)私钥”。我已经尝试了用于对服务器进行身份验证的密钥以及我能找到的所有其他密钥,但无法生成仅供 Meteor 使用的新密钥。
3)将两者留空并允许它“尝试”ssh-agent - 假装它不知道 ssh-agent 是什么,并抛出一个错误,内容与我使用密码时的内容相同。
我已仔细阅读并遵循以下文章中的相同说明:http://meteortips.com/deployment-tutorial/digitalocean-part-1/
本文假设只有两种可能的状态。其中之一是 ssh 密钥尚未使用或设置,因此需要生成它。第二个是 ssh 密钥存在并且完全设置在他们期望的位置。不幸的是我似乎处于不同的情况。在设置 D.O 服务器之前,我使用 putty 生成了一个密钥,并使用它创建了 Droplet。创建后,该文件不存在。 ~/.ssh/ 目录中唯一的东西是一个名为“authorized_keys”的文件,其中包含我用来连接服务器的密钥。该文件无法使用,服务器上其他 ssh 密钥位置的任何文件也无法使用。我也尝试将文件直接复制到服务器上,但无济于事。
为了找到解决方案,我也尝试在 Meteor 构建包和源代码文件夹中运行这些相同的命令。两者都不起作用。我应该提到,虽然这是我仍然可以尝试解决方案的唯一一篇文章,但我已经尝试了使用 MUP 找到的所有文章。
如果有人能以此为我指明正确的方向,这样我就可以停止在黑暗中疯狂地挣扎,我将非常感激。
编辑:根据要求,下面是删除了凭据的当前 mup.js 文件
module.exports = {
servers: {
one: {
// TODO: set host address, username, and authentication method
host: '111.111.111.11',
username: 'root',
// ssh-agent: '/home/Meteor/MeteorKey.pem'
pem: '~/.ssh/id_rsa.pub'
// password: 'password1'
// or neither for authenticate from ssh-agent
}
},
app: {
// TODO: change app name and path
name: 'app-name',
path: '../',
servers: {
one: {},
},
buildOptions: {
serverOnly: true,
},
env: {
// TODO: Change to your app's url
// If you are using ssl, it needs to start with https://
ROOT_URL: 'http://www.app-name.com',
MONGO_URL: 'mongodb://mongodb/meteor',
MONGO_OPLOG_URL: 'mongodb://mongodb/local',
},
docker: {
// change to 'abernix/meteord:base' if your app is using Meteor 1.4 - 1.5
image: 'abernix/meteord:node-8.4.0-base',
},
// Show progress bar while uploading bundle to server
// You might need to disable it on CI servers
enableUploadProgressBar: true
},
mongo: {
version: '3.4.1',
servers: {
one: {}
}
},
// (Optional)
// Use the proxy to setup ssl or to route requests to the correct
// app when there are several apps
// proxy: {
// domains: 'mywebsite.com,www.mywebsite.com',
您收到的错误消息:
Error: All configured authentication methods failed
表示 SSH 连接失败。因此,您正在使用的凭据(遗憾的是您从配置中删除了它们)不起作用。尝试使用命令行 ssh 使用这些相同的凭据,然后进行故障排除 - 一旦您可以 ssh 进入服务器,那么 mup 应该能够完成它的工作。
您可以通过指定一个或多个
-v
参数从 ssh 获取更多信息,例如:
ssh -v -v [email protected]
它会向您提供有关它正在尝试的身份验证方法的信息。这将帮助您缩小问题范围。
这是一个旧线程,但对于到达这里并尝试在较新版本的 Ubuntu 上进行设置的任何人(例如数字海洋水滴 Ubuntu 22.04 (LTS) x64),我只需降级到 Ubuntu 即可使其工作20.04(LTS)x64。我猜想 ssh 代理或配置在较新的 Ubuntu 版本上已更改。 我希望这可以节省一些人的时间。
在 Ubuntu 22.04 上,默认情况下不允许使用 RSA 作为 SSH 密钥算法。我能够通过将此行添加到
/etc/ssh/sshd_config
来解决问题:
PubkeyAcceptedKeyTypes=+ssh-rsa