2016-12-27 27 views
0

我試圖將文件從遠程服務器B複製到遠程服務器A.我的Elixir應用程序位於服務器A上。我正在執行此操作:Elixir與「scp」 - 權限被拒絕並且連接丟失

a1 = System.cmd("scp", ["[serverB.....]", "/opt/folder1/"]) 
# => Permission denied 
# {"", 1} 



a2 = System.cmd("scp", ["serverB.....]", "/home/my_user"]) 
# => Connection to serverB closed by remote host. 
# lost connection 
# {"", 1} 

在第一種情況下,我只收到權限被拒絕。

在第二種情況下,我確實收到了一個文件,這很好,但爲什麼它看起來像是失敗?

我的目標是讓第一工作,因爲我想文件被直接下載到「的/ opt /文件夾1 /」。最好。

我該怎麼做?可以通過scp嗎?還是應該先下載到我的主目錄?

爲什麼它在第二種情況失敗,出了什麼問題?

此外,也許我應該改爲使用rsync來避免權限問題?

更新:

我已經給文件夾的權限 「的/ opt /文件夾1 /」

sudo chmod 775 

但錯誤並沒有消失。

UPDATE2

我給的權限777它種作品 - 文件被下載。但返回結果仍然是這樣的:

Connection to bb.bb.bb.bb closed by remote host. 
lost connection 
       {"", 1} 

這是爲什麼? 1意味着「錯誤」不是嗎?更不要說「失去聯繫」。

+1

如果您在shell提示符下對同一用戶使用相同的命令,會發生什麼情況?這看起來像是'my_user'沒有權限寫入'/ opt/folder1 /' –

+0

@OnorioCatenacci,同樣的問題。否認。但如何治癒? – Jodooomi

+0

你是盒子上的管理員嗎?如果是這樣,你需要弄清楚如何給予my_user權限。如果沒有,請管理員幫助你。無論哪種方式,這不是一個Elixir問題 - 它更多的是關於Linux中的scp和權限問題。 –

回答

2

登錄到serverB與普通的舊好ssh和執行:

sudo chown -R my_user /opt/folder1/ 

或者(如果只有你完全理解的後果):從遠程

sudo chmod a+xw /opt/folder1/ 

註銷。現在您應該可以成功執行System.cmd/3

一般來說,scp命令的格式是:

scp SOURCE_FILE [email protected]_HOST:TARGET_DIR 

所以你可能會更好地執行:

System.cmd("scp", ["my_local_file", "[email protected]:/opt/folder1/"]) 

這樣,你應該會收到System.cmd/3{"", 0}響應。

+0

請看我的更新。 – Jodooomi

+0

請參閱更新。 – mudasobwa

+0

我需要下載文件,而不是上傳。 – Jodooomi