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

相關問題