无法连接到远程Geth,connect: permission denied.
我在安装了Geth节点的ubuntu服务器X上创建了一个shell脚本,在测试链中插入智能合约数据。此外,我通过使用Shell脚本命令在同一服务器X上创建一个PHP文件insertscript.php。当我从命令提示符调用PHP脚本时,它会成功执行,并且数据被插入到区块链中。但是当我用CURL调用另一个服务器的PHP脚本或在浏览器中打开它时,我会看到错误:
Fatal: Unable to attach to remote geth: dial unix ///home/ubuntu/.ethereum/testnet/geth.ipc: connect: permission denied
我的shell脚本如下:
#!/bin/sh
ATTACHPARAMETER="ipc:///home/ubuntu/.ethereum/testnet/geth.ipc"
INCIDENTUUID=${1:-"photo-55697b7f4a550511448499999999"}
USERUUID=${2:-"null"}
TIMESTAMP=$3
STATUS=$4
echo $INCIDENTUUID
echo $USERUUID
echo $TIMESTAMP
echo $STATUS
geth attach $ATTACHPARAMETER << EOF
var abi = [abi definition];
var address = "addressofContract";
var mycontract = web3.eth.contract(abi).at(address);
eth.defaultAddress = eth.accounts[0];
personal.unlockAccount(eth.accounts[0],'test');
mycontract.createIncident('$INCIDENTUUID','$USERUUID',$TIMESTAMP,$STATUS,{from:eth.accounts[0],gas:1400000});
console.log("Inserted");
EOF
问题解答
这是因为你的Geth二进制文件在一个用户标识下运行,但是WebServer运行在另一个用户标识下。
你必须让geth.ipc
文件可以读写到你的Web服务器上,无论是通过组访问还是在两个进程(WebServer和Geth)上使用相同的user_id。
此外,请注意,不能通过2个计算机之间的IPC(进程间通信)共享Geth访问,IPC仅在单个计算机内工作,因为它是数据共享的内核级实现。