Skip to content

A simple wrapper to make bash (or other shell) commands with http.

License

Notifications You must be signed in to change notification settings

5HT2C/http-bash-requests

Repository files navigation

http-bash-requests

A simple wrapper to make bash (or other shell) commands with http.

DISCLAIMER: This intentionally has no authentication built in, and only works on localhost. As such, be VERY cautious about giving it elevated permissions. This also allows other users on your machine to delete your entire home folder (even without elevated permissions), if they would like, among other things.

I do not take any responsibility for the consequences of you running this, or any other, software on any computer.

OTHER DISCLAIMER: This also has the ability to execute any executable file on your computer as your current user. The X-Bin-Path, X-Bin-Arg and X-Body-Split HTTP headers make this possible. This is very dangerous.

I really do not advise you run this on any open machine that isn't a scrappable VM (READ: DO NOT RUN ON A REAL SYSTEM).

Why?

I wanted a very quick hack to allow my docker containers to reboot themselves.

Usage

# Run
go run main.go -port 6016

# Build to dir
go build -o ~/.local/bin/http-bash-requests .

curl localhost:6016 -d "echo test"

Service

You can also use the services to keep it enabled.

mkdir -p ~/.config/systemd/user/
curl https://raw.githubusercontent.com/5HT2C/http-bash-requests/master/http-bash-requests.service -o ~/.config/systemd/user/http-bash-requests.service
curl https://raw.githubusercontent.com/5HT2C/http-bash-requests/master/http-bash-requests.timer -o ~/.config/systemd/user/http-bash-requests.timer
# Enable the service and timer for the current user
systemctl --user enable --now http-bash-requests.timer

Verify that the service is working like so, and ensure "test" is in the status log:

Library

Here is a basic example for using the library:

package main

import (
	"github.com/5HT2C/http-bash-requests/httpBashRequests"
	"log"
	"net/http"
)

func main() {
	// Setup only needed once
	client := httpBashRequests.Client{Addr: "http://localhost:6016", HttpClient: &http.Client{Timeout: 5 * time.Minute}}
	httpBashRequests.Setup(&client)

	// Now we can run bash requests over http
	log.Println(httpBashRequests.Run("ls"))
}

About

A simple wrapper to make bash (or other shell) commands with http.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published