簡體   English   中英

從Heroku打開SSH

[英]Open SSH from Heroku

我在Heroku上部署了一個工人,該工人定期將文件上傳到ssh服務器。 它寫在Node.js上,它可以:

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

為了連接到服務器,存儲庫有一個* id_rsa *文件,該文件帶有一個私鑰,該私鑰比myserver.com所授權。 我已經在兩台計算機上對其進行了測試(而不是與myserver.com進行了密鑰交換),並且它可以工作,但是當我將其上傳到Heroku時,它會輸出scp:

Host key verification failed.

為什么?

注意

我也試過而不是執行scp

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

同樣的問題。

UPDATE

執行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

找到了問題,它不是在RSA密鑰上,而是在服務器密鑰上。

第一次在兩台計算機之間建立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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM