{"id":17657983,"url":"https://github.com/3rd/cloudwork","last_synced_at":"2025-03-30T10:13:44.753Z","repository":{"id":239838844,"uuid":"800739469","full_name":"3rd/cloudwork","owner":"3rd","description":"Bare-bones distributed processing over SSH helper.","archived":false,"fork":false,"pushed_at":"2024-06-18T18:08:16.000Z","size":28,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-05T12:11:22.480Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/3rd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-14T22:50:03.000Z","updated_at":"2024-06-18T18:08:19.000Z","dependencies_parsed_at":"2024-05-18T15:40:58.003Z","dependency_job_id":"d2dfb7f3-051a-4112-892b-04a874d33788","html_url":"https://github.com/3rd/cloudwork","commit_stats":null,"previous_names":["3rd/cloudwork"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3rd%2Fcloudwork","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3rd%2Fcloudwork/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3rd%2Fcloudwork/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3rd%2Fcloudwork/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3rd","download_url":"https://codeload.github.com/3rd/cloudwork/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246301996,"owners_count":20755514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-23T14:43:51.123Z","updated_at":"2025-03-30T10:13:44.704Z","avatar_url":"https://github.com/3rd.png","language":"Go","readme":"# Cloudwork\n\nCloudwork is a bare-bones automation tool for quickly spawning machines in the cloud and distributing workloads across them.\n\n\u003e [!WARNING]  \n\u003e Screen recording is outdated.\n\nhttps://github.com/3rd/cloudwork/assets/59587503/391373cd-7b69-4b21-85c9-2a8d35cd3e3f\n\n## Installation\n\nRequirements:\n\n- `ssh`\n- `rsync`\n\n```bash\ngo install github.com/3rd/cloudwork@latest\n```\n\n## Setup\n\nFirst, you'll need to create a `cloudwork.yml` configuration file.\n\\\nThe configuration file is a YAML file that looks like this:\n\n```yaml\nworkers:\n  - host: worker1\n  - host: worker2\n  - host: worker3\n\nscripts:\n  setup: |\n    # This runs when you do `cloudwork setup` if the worker wasn't already setup or if the script changed.\n    apt update -y \u0026\u0026 apt upgrade -y\n    apt install -y apt-transport-https ca-certificates curl software-properties-common gcc clang make build-essential libssl-dev libffi-dev libpcap-dev\n    apt install -y neovim\n    curl -s https://get.docker.com/ | sh\n    usermod -aG docker $USER\n    mkdir /app\n    upload Dockerfile /app\n\n  default: |\n    # This runs on each worker when you do `cloudwork run`.\n    upload-input /tmp/worker/input/\n    docker build -t work /app\n    docker run -v /tmp/worker/input:/input -v /tmp/worker/output:/output -it work\n    download-output /tmp/worker/output/\n```\n\nUse `cloudwork bootstrap` to create the input/output directory structure for the configured workers.\n\\\nAfter running this command, you will have a \"workers\" directory with the following structure:\n\n```\n|-- workers/\n|   |-- worker1/\n|   |   |-- input/*\n|   |   |-- output/*\n|   |-- worker2/\n|   |   |-- input/*\n|   |   |-- output/*\n|   ...\n|-- cloudwork.yml\n```\n\nIn the example configuration, `setup` and `run` are scripts that will run on workers.\n\\\nThere are a few special commands that you can use in scripts:\n\n- `upload-input \u003cremote path\u003e` - Uploads `./workers/\u003cworker/input/*` to the worker at `\u003cremote path\u003e`.\n- `download-output \u003cremote path\u003e` - Downloads `\u003cremote path\u003e` to `./workers/\u003cworker/output/`.\n- `upload \u003clocal path\u003e \u003cremote path\u003e` - Uploads localhost:`\u003clocal path\u003e` to remote: `\u003cremote path\u003e`.\n- `download \u003cremote path\u003e \u003clocal path\u003e` - Downloads remote: `\u003cremote path\u003e` to localhost:`\u003clocal path\u003e`.\n\n\u003e [!WARNING]\n\u003e Upload and download operations are extracted from the script and don't run when you'd expect.\n\u003e Uploads are done before the script is run, and downloads are done after the script is run.\n\n\u003e [!TIP]\n\u003e The paths used in the upload/download commens are pass as-they-are to `rsync`, remember to add a trailing slash if you want to upload/download the contents of a directory.\n\n## Usage\n\n- `cloudwork bootstrap` - Creates the input/output directory structure for the configured workers.\n- `cloudwork run [script-name]` - Runs the specified script on all workers. If no script name is provided, it runs the \"default\" script.\n- `cloudwork run ./script.sh` - Runs a script (file) on all workers.\n- `cloudwork exec \"command\"` - Executes a command on all workers.\n- `couldwork -host \u003chost\u003e \u003ccommand\u003e` - idem, but only for the specified `\u003chost\u003e`.\n\n## Examples\n\n### Subdomain enumeration with puredns\n\n```yaml\nworkers:\n  - host: worker1\n  - host: worker2\n  - host: worker3\n\nscripts:\n  setup: |\n    apt update -y \u0026\u0026 apt upgrade -y\n    apt install -y apt-transport-https ca-certificates curl software-properties-common gcc clang make build-essential libssl-dev libffi-dev libpcap-dev\n    apt install -y golang-go\n\n    mkdir -p \"$HOME/go\"\n    export GOPATH=\"$HOME/go\"\n    export PATH=\"$GOPATH/bin:$PATH\"\n    grep -q \"export GOPATH\" ~/.profile || {\n        echo \"export GOPATH=$HOME/go\" \u003e\u003e~/.profile\n        echo \"export PATH=\\$GOPATH/bin:\\$PATH\" \u003e\u003e~/.profile\n    }\n\n    git clone https://github.com/blechschmidt/massdns.git\n    cd massdns\n    make\n    make install\n\n    go install github.com/d3mondev/puredns/v2@latest\n\n    mkdir -p /worker\n    upload sample-wordlist.txt /worker\n    upload sample-resolvers.txt /worker\n\n  default: |\n    puredns bruteforce \\\n        /worker/sample-wordlist.txt \\\n        -t 100 -rate-limit 500 \\\n        -r /worker/sample-resolvers.txt \\\n        -d /tmp/worker/input/domains.txt \\\n        -w /tmp/worker/output/results.txt \\\n        --write-wildcards /tmp/worker/output/wildcards.txt\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3rd%2Fcloudwork","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3rd%2Fcloudwork","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3rd%2Fcloudwork/lists"}