天天看點

無法連接配接到遠端Geth,connect: permission denied.

無法連接配接到遠端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/

另外推薦幾個很受歡迎全網稀缺的互動教程:

  • php以太坊 ,主要是介紹使用php進行智能合約開發互動,進行賬号建立、交易、轉賬、代币開發以及過濾器和事件等内容。
  • python以太坊 ,主要是針對python圍繞web3.py進行區塊鍊以太坊應用開發的講解。
  • web3j ,主要是針對java和android程式員圍繞web3j庫進行區塊鍊以太坊開發的講解。
  • 以太坊開發 ,主要是介紹使用node.js、mongodb、區塊鍊、ipfs實作去中心化電商DApp實戰,适合進階。
  • 以太坊教程 ,主要介紹智能合約與dapp應用開發,适合入門。