- Install Redis: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-redis
- Install Webdis
- Start a minecraft server with computercraft. You will need to have the http API enabled, which is the default.
- Put down a turtle I recommend a turtle with a crafting square and a pickaxe. I also recommend giving it a label. If you’re not trying the turtle replication challenge, either disable fuel or get a fair bit of starting fuel. Write down the computer’s id.
- Put down a chunk loader, if you’re in a modpack that has them, or DON’T log out. Computers and turtles can’t operate unless the chunks are loaded. If you’re putting down a chunkloader, I surrounded them with bedrock for foolproofing.
Open the turtle and download the following script, changing “redis.example.com” to your own redis instance: pastebin get 8FjggG9w startup
After you have the script saved as ‘startup’, run it or reboot the computer, and it should start listening for instructions.redis = "http://redis.example.com" queue = "sshbot" .. os.getComputerID() return_queue = queue .. "_return" print("Remote webdis queues on icyego: " .. queue .. " and " .. return_queue) print("Receiving remote commands.") function exec(str) print("Running: " .. str) f = fs.open("tmp", "w") f.write(str) f.close() p = loadfile("tmp") status, err = pcall(function () p = loadfile("tmp"); return p() end) if status then status, ret = pcall(function() return textutils.serialize(err) end) if status then result = ret else result = "" end else result = "Error: " .. err end print(result) return result end print("Now receiving remote commands.") while true do handle = http.get(redis .. "/BRPOP/" .. queue .. "/5.txt") if (handle and handle.getResponseCode() == 200) then str = handle.readAll() handle.close() str = string.sub(str, string.len(queue) + 1) result = exec(str) if string.find(result, "Error: ") then result2 = exec("return " .. str) if string.find(result2, "Error: ") then a=0 else result=result2 end end http.post(redis, "LPUSH/" .. return_queue .. "/" .. result) end end
On your local machine, save the following, again replacing “redis.example.com”:
#!/bin/bash function send() { curl -s -X POST -d "LPUSH/sshbot${1}/${2}" "http://redis.example.com" >/dev/null } function get() { curl -s -X GET "http://redis.example.com/BRPOP/sshbot${1}_return/20.json" | jq .BRPOP[1] } if [ $# -ne 1 ]; then echo "Usage: rlwrap ./sshbot <COMPUTER_ID>" exit 1 fi ID=$1 while read LINE; do send ${ID} "$LINE" get ${ID} done
Run: rlwrap ./sshbot
, where is the turtle’s ID. You should be able to send commands to the computer now.
-
archiving art backup blog book review cooking crafts dead tree debian email game game design games hack-a-day hacks hardware linux minecraft music november organization physical piskell pixel art programming publishing recipe research review rick and morty self-improvement silly software storage system administration throwaway timelog video video game video games website websites wikipedia yearly review zorchpad