我有两台EC2机器:master和slave。为用户ubuntu
生成SSH密钥,并将其保存到两台机器上的~/.ssh/authorized_keys
。因此,我可以使用来自主节点的集群作为ubuntu
用户,如下所示:
library(doSNOW)
cluster_options <-
c(rep(list(
list(host = "ec2-xx-xx-xx-xx.compute-1.amazonaws.com",
snowlib = "/usr/local/lib/R/site-library")), 2))
cl <- makeCluster(cluster_options, type = "SOCK")
clusterApply(cl, 1:2, get("+"), 3)
stopCluster(cl)
但当我通过openCPU
调用它时,它会给出permission denied
消息。
目前我正在考虑两种可能的解决方案:
- 为
opencpu
用户添加SSH密钥。但我不知道怎么做,因为opencpu
是非交互式用户 - 使从属服务器可由主机访问,而无需任何SSH密钥
我更喜欢第一种方式,在这里肯定需要帮助。但第二种方式也可以。
最后我找到了解决方案。它有几个方面:
- 应在两个EC2节点之间配置基于主机的身份验证。好的教程可以在这里找到:https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Host-based_Authentication
OpenCPU
应安装在两个节点上- 应该为
www-data
用户生成SSH密钥(R
进程与该用户一起执行)。这里的微妙之处在于,www-data
是非交互式用户,因此我们需要使其具有交互式(编辑/etc/passwd
),为www-data
生成SSH密钥对,向服务器节点添加公钥,并使www-data
再次具有非交互式
不那么优雅,但它可以工作:)