0

我想将文件从我的一个rails应用程序复制到aws ec2实例上托管的远程/另一个应用程序。我有我的安全组TCP端口21和21 ssh和sftp打开。但我无法想出任何方式来做到这一点。到目前为止,我已尝试scp,它不起作用。如何将文件从一个rails应用程序复制到aws ec2实例

我尝试这样做:

scp -i ec2-keypair.pem myfile.txt [email protected]:/home/ubuntu/my_new_file.txt 

它提示如下:Using /home/ubuntu/.rvm/gems/ruby-1.8.7-p334并退出。但文件传输不会发生。什么可能是可能的问题?

此外,如果您知道有更好的解决方案来做同样的事情,请帮助我了解您的知识。谢谢

编辑:这将是伟大的,如果,解决方案可在rubyruby on rails。最终导致我必须将文件从一个rails应用程序传输到另一个应用程序。

编辑:当我做scp -v -i ~/.ec2/ec2-keypair.pem Gemfile.lock [email protected]:/home/ubuntu/apps/我得到这个:http://pastie.org/3613259

,并在这里看到:http://pastie.org/3613269更详细的输出与-vvv

+0

从未见过这样的错误信息。你可以SSH到这个实例吗? – 2012-03-15 10:56:49

+0

是的,我可以SSH两个EC2实例。但是scp不会发生..:'( – Surya 2012-03-15 11:01:51

+0

在您的命令中添加一些调试日志 – shingara 2012-03-15 11:33:53

回答

1

所以我发现这个线程,最后一个项目可能是相关。 http://centos.org/modules/newbb/viewtopic.php?topic_id=30515&forum=42

(顺便说一句,ssh -vvv会让你调试级别3,甚至更难以捉摸的细节)。

所以可以肯定的是,最常见的问题是,.ssh目录(在本地和远程主机上)的权限在某种程度上过分宽容,ssh将拒绝使用凭据。 .ssh目录上的许可证仅限用户rwx(用于用户的唯一用户(八进制chmod 700),rw用于私钥和.pem密钥对,组/全部可读取其他文件。

drwx------ 11 tharrison staff 374 Mar 1 16:37 . 
drwxr-xr-x+ 79 tharrison staff 2686 Mar 8 10:43 .. 
-rw-r--r-- 1 tharrison staff 128 Aug 16 2010 .ssh-agent 
-rw-r--r-- 1 tharrison staff 132 Dec 29 14:42 config 
-rw------- 1 tharrison staff 1675 Apr 20 2009 id_rsa 
[email protected] 1 tharrison staff 405 Apr 20 2009 id_rsa.pub 
-rw-r--r-- 1 tharrison staff 2805 Mar 5 08:33 known_hosts 
[email protected] 1 tharrison staff 1693 Apr 27 2011 my-aws-keypair.pem 

SSH是(正确)偏执它会发送给任何日志 - 它并不想放弃什么是或不工作的这些提示可以用来发现漏洞的任何提示,等等。所以日志可能会有帮助......偶尔。

但我不确定这是否正确,因为我认为你说你可以使用ssh从命令行成功登录,并且scp不起作用 - 这种规则不适用于ssh身份验证问题(正如我所说的,scp实际上只是ssh),这就是为什么值得确保您以远程方式登录的用户具有将文件写入到发送位置的适当权限的原因。

也许试试ssh -i mykeypair.pem [email protected] 'touch ~/foo'开始“my”的所有值都需要用正确的值替换,例如, mykeypair.pem将需要具有用于登录的密钥对的路径和名称。如果这样,它将在服务器myremote.host的myuser主目录中创建一个名为foo的文件 - 使用ssh登录而不使用命令并检查 - 那么你有适当的权限,至少到那个目录。现在尝试一下真实的目录。

如果在那里失败,请检查路径中的所有目录是group-x还是all-x,目标目录是group还是全部rwx。

编辑:更正测试SSH命令和扩大程序和澄清。

+0

@tharrion对不起,回复晚:)我试过'ssh -i mykeypair.pem mylocal ubuntu @ myremote -c“touch〜/ foo”'但它没有工作!我将mylocal替换为localhost:3000,它试图访问远程数据库,它似乎不存在于本地。并出现错误:未找到'db_name.server_name'。 – Surya 2012-03-20 11:00:12

+1

糟糕,我的错误在ssh命令 - 多个错误(脸红),应该是'ssh -i mykeypair.pem [email protected]'touch〜/ foo'' - 这个命令运行'touch〜/ foo '在主机'myremote.host'上用'myuser'作为用户使用本地文件'mykeypair.pem'中找到的凭证。第一个例子中的错误:1)不需要'mylocal',2)不需要'-c',3)在命令周围使用单引号,这样你的本地shell就不会解释'〜'是指你的本地主目录。所有“我的”占位符的正确值将需要替换为适合您系统的正确值。 – 2012-03-20 13:20:25

+0

我更正了我的答案,并更正了ssh和一些说明。 – 2012-03-20 13:25:46

相关问题