A. *_*ada 0 scp heroku node.js
我已经在Heroku上部署了一个工作人员,他定期将文件上传到ssh服务器.它是在Node.js上写的,它确实:
require('child_process').exec('scp -i id_rsa myfile.txt myuser@myserver.com:updated.txt', function() { ... });
Run Code Online (Sandbox Code Playgroud)
为了连接到服务器,存储库有一个*id_rsa*文件,其私钥不是myserver.com授权的私钥.我已经在两台计算机上进行了测试(没有与myserver.com进行密钥交换)并且它可以工作,但是当我将它上传到Heroku时,scp输出:
Host key verification failed.
Run Code Online (Sandbox Code Playgroud)
为什么?
我也试过而不是执行scp:
cat file.txt | ssh [myuser]@[myserver] "cat > updated.txt"
Run Code Online (Sandbox Code Playgroud)
一样的问题.
执行ssh -v ...输出:
[...]
debug1: read_passphrase: can't open /dev/tty: No such device or address
Host key verification failed.
[...]
Run Code Online (Sandbox Code Playgroud)
我无法访问Heroku上的tty?
这是repo上的所有文件:
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());
});
Run Code Online (Sandbox Code Playgroud)
-----BEGIN RSA PRIVATE KEY-----
[censored]
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
{
"name": "exta",
"version": "0.0.1",
"engines": { "node": "0.6.x" }
}
Run Code Online (Sandbox Code Playgroud)
worker: node main
Run Code Online (Sandbox Code Playgroud)
Testing
Run Code Online (Sandbox Code Playgroud)
发现问题,它不在RSA密钥上,而是在服务器密钥上.
第一次在两台计算机之间建立SSH连接时,SSH要求您将服务器的密钥添加到〜/ .ssh/known_hosts以执行此操作,尝试将其提示到tty中.因为我已经在我的计算机上接受了服务器的密钥,所以当我在本地测试它时没有发生.
由于我不确定如何命令我的程序将密钥添加到〜/ .shh/known_hosts我欺骗了SSH以添加密钥而不询问:
ssh -i id_rsa -o -o StrictHostKeyChecking=no [myuser]@[myserver]
Run Code Online (Sandbox Code Playgroud)
由于我不想触摸Heroku的环境,我还要求ssh将密钥存储在/ dev/null上,因此不会修改任何内容:
ssh -i id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [myuser]@[myserver]
Run Code Online (Sandbox Code Playgroud)
并且...它的工作原理!:d
| 归档时间: |
|
| 查看次数: |
1887 次 |
| 最近记录: |