哪个.ssh / known_hosts文件由Azure中的npm使用?

时间:2016-05-12 09:06:18

标签: azure ssh npm kudu

在Azure App Service实例中从Kudu的控制台运行npm install git+ssh://<git repo url>失败,并显示以下错误:

npm ERR! Host key verification failed.
npm ERR! fatal: Could not read from remote repository. 

often通过将主机密钥添加到.ssh/known_hosts文件来解决此错误。问题是正确的密钥已经存在。如果它不存在,git clone <git repo url>将失败并出现相同的错误,但事实并非如此。它成功克隆了存储库。

为了调试此问题,我尝试通过DEBUG3文件将SSH的日志级别设置为~/.ssh/config,但输出没有更改(使用git clone时,它打印调试信息)。

因此,我怀疑问题是Azure中npm使用的SSH客户端没有考虑~/.ssh目录。

我的问题是,这是在某处记录还是错误?你知道bug是哪个组件吗?

FTR,完整输出是:

npm ERR! git clone --template=D:\local\AppData\npm-cache\_git-remotes\_templates --mirror <git repo url> D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85: Cloning into bare repository 'D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85'...
npm ERR! git clone --template=D:\local\AppData\npm-cache\_git-remotes\_templates --mirror <git repo url> D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85: 
npm ERR! git clone --template=D:\local\AppData\npm-cache\_git-remotes\_templates --mirror <git repo url> D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85: Host key verification failed.
npm ERR! git clone --template=D:\local\AppData\npm-cache\_git-remotes\_templates --mirror <git repo url> D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85: fatal: Could not read from remote repository.
npm ERR! git clone --template=D:\local\AppData\npm-cache\_git-remotes\_templates --mirror <git repo url> D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85: 
npm ERR! git clone --template=D:\local\AppData\npm-cache\_git-remotes\_templates --mirror <git repo url> D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85: Please make sure you have the correct access rights
npm ERR! git clone --template=D:\local\AppData\npm-cache\_git-remotes\_templates --mirror <git repo url> D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85: and the repository exists.
npm ERR! Windows_NT 6.2.9200
npm ERR! argv "D:\\Program Files (x86)\\nodejs\\4.2.3\\node.exe" "D:\\Program Files (x86)\\npm\\3.5.1\\node_modules\\npm\\bin\\npm-cli.js" "install" "git+ssh://<git repo url>"
npm ERR! node v4.2.3
npm ERR! npm  v3.5.1
npm ERR! code 128



npm ERR! Command failed: git -c core.longpaths=true clone --template=D:\local\AppData\npm-cache\_git-remotes\_templates --mirror <git repo url> D:\local\AppData\npm-cache\_git-remotes\git-ssh-<git repo url>-dc8c35134031285cb7109c3e32618e85
npm ERR! Host key verification failed.
npm ERR! fatal: Could not read from remote repository.
npm ERR! 
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
npm ERR! 
npm ERR! 
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     D:\home\site\foo\npm-debug.log

2 个答案:

答案 0 :(得分:0)

以下是如何在Azure App Service上处理SSH设置(配置文件,已知主机,公钥/私钥):

  1. SSH配置的默认文件夹是D:\home\.ssh。这就是Kudu调试控制台中使用的SSH和Git。

  2. 当您trigger host key generationhttps://your-site.scm.azurewebsites.net/sshkey?ensurePublicKey=1时,它会创建D:\home\.ssh文件夹并将StrictHostKeyChecking no的配置文件放入其中(以及新生成的SSH密钥)。这意味着通过调试控制台运行的SSH现在将自动接受hostkeys。

  3. Azure App Service上的npm需要%USERPROFILE%中的SSH配置。您可以看到,当您第一次在调试控制台中运行npm时,它将创建空文件夹%USERPROFILE%\.ssh

  4. 对于npm兼容性,Kudu的部署脚本会将D:\home\.ssh文件夹复制到%USERPROFILE%(请参阅issue / fix)。每次通过Web应用程序的本地Git存储库,通过Github或触发Kudu的任何其他部署选项进行部署时,都应该发生这种情况。

  5. 根据我的经验,在缩放和重新启动应用时,.ssh中复制的%USERPROFILE%文件夹将被删除。

  6. 我认为在我的案例中发生的事情是,在调试不同的npm / git / ssh问题时,我重新启动了Web应用程序。然后,在调试控制台中手动运行npm install时,我最终遇到了主机密钥验证问题。

答案 1 :(得分:0)

所以对我来说,问题是我的应用程序服务是通过Github部署的,因此在Github上有与其部署相关的部署密钥。
为了能够访问我的其他私人仓库,我需要执行以下操作。

在此npm之后,将很高兴安装我的私人存储库。