0

定期的にファイルをsshサーバーにアップロードするワーカーをHerokuにデプロイしました。Node.jsに書き込まれ、次のことを行います。

require('child_process').exec('scp -i id_rsa myfile.txt myuser@myserver.com:updated.txt', function() { ... });

サーバーに接続するために、リポジトリにはmyserver.comによって許可されている秘密鍵を持つ*id_rsa*ファイルがあります。2台のコンピューターでテストし( myserver.comとの鍵交換がない場合)、動作しますが、Herokuにアップロードすると、scpが出力します。

Host key verification failed.

なんで?

ノート

scpを実行する代わりに試しました:

cat file.txt | ssh [myuser]@[myserver] "cat > updated.txt"

同じ問題。

アップデート

ssh -vを実行すると...出力されます:

[...]
debug1: read_passphrase: can't open /dev/tty: No such device or address
Host key verification failed.
[...]

Herokuでttyにアクセスできませんか?

これは、リポジトリ上のすべてのファイルです。

main.js

require('child_process').exec('scp -i id_rsa file.txt [myuser]@[myserver]:updated.txt', function(error, stdout, stderr) {
    if (error)
        console.error('FAILED', stderr.toString());
    console.log('OUTPUT', stdout.toString());
});

id_rsa

-----BEGIN RSA PRIVATE KEY-----
[censored]
-----END RSA PRIVATE KEY-----

package.json

{
    "name": "exta",
    "version": "0.0.1",
    "engines": { "node": "0.6.x" }
}

Procfile

worker: node main

file.txt

Testing
4

1 に答える 1

5

問題が見つかりました。RSAキーではなくサーバーキーにありました。

2台のコンピューター間でSSH接続が初めて確立されると、SSHはサーバーのキーを〜/ .ssh / known_hostsに追加するように要求します。これを行うには、サーバーのキーをttyに入力しようとします。私はすでに自分のコンピューターでサーバーのキーを受け入れているので、ローカルでテストしたときにそれは起こりませんでした。

〜/ .shh / known_hostsにキーを追加するようにプログラムを注文する方法がわからないため、SSHをだまして、質問せずにキーを追加しました。

ssh -i id_rsa -o -o StrictHostKeyChecking=no [myuser]@[myserver]

Herokuの環境に触れたくないので、sshにキーを/ dev / nullに保存するように依頼したので、何も変更されません。

ssh -i id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [myuser]@[myserver]

そして...それはうまくいく!:D

于 2013-02-21T16:37:42.827 に答える