定期的にファイルを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