無法連接配接到遠端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僅在單個計算機内工作,因為它是資料共享的核心級實作。
原文《以太坊常見問題和錯誤》中的:
http://cw.hubwiz.com/card/c/ethereum-FAQ/1/1/21/另外推薦幾個很受歡迎全網稀缺的互動教程: