2016-12-27 29 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