{"id":42636521,"url":"https://github.com/seajoshc/dothisonthat","last_synced_at":"2026-01-29T05:54:59.614Z","repository":{"id":12884057,"uuid":"15560608","full_name":"seajoshc/dothisonthat","owner":"seajoshc","description":"Do This On That (dtot) sequentially runs commands on one or more hosts in the specified order","archived":false,"fork":false,"pushed_at":"2018-06-12T21:55:07.000Z","size":18,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-14T10:41:26.241Z","etag":null,"topics":["automation","linux","ruby","sysadmin"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seajoshc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-01-01T04:54:04.000Z","updated_at":"2018-06-12T21:55:08.000Z","dependencies_parsed_at":"2022-07-12T15:04:52.502Z","dependency_job_id":null,"html_url":"https://github.com/seajoshc/dothisonthat","commit_stats":null,"previous_names":["irlrobot/dothisonthat"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/seajoshc/dothisonthat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seajoshc%2Fdothisonthat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seajoshc%2Fdothisonthat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seajoshc%2Fdothisonthat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seajoshc%2Fdothisonthat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seajoshc","download_url":"https://codeload.github.com/seajoshc/dothisonthat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seajoshc%2Fdothisonthat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28864739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T22:56:21.783Z","status":"online","status_checked_at":"2026-01-29T02:00:06.714Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["automation","linux","ruby","sysadmin"],"created_at":"2026-01-29T05:54:59.523Z","updated_at":"2026-01-29T05:54:59.606Z","avatar_url":"https://github.com/seajoshc.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# About \nDo This On That (dtot) sequentially runs plain shell commands on one or more hosts in the specified order. You need SSH public key authentication already setup on the target hosts. You can run a single command across multiple hosts by running dtot from the command line with arguments, or you can feed dtot a list of commands and hosts by using some helper files.  See the Usage section below for more information.\n\n# Usage\n```gem install dtot```\n\u003cbr\u003e\n```dtot --help```\n\nSpecify commands followed by multiple hosts to run commands, sequentially, on all hosts in specified order.  Uses the currently logged in, local user as the username on the target systems.\n\n```dtot -c uptime,w,\"ls -lah /\" -w host1,host2,host3```\u003cbr\u003e\n```dtot -c \"sudo yum update -y\" -w host1,host2```\n\nOr, use \"do this\" and \"on that\" files:\u003cbr\u003e\n```dtot -d do_this -o on_that```\n\n## do_this\nEach command should be on one line; commands are run sequentially, not in parallel (by design).  See the example do_this in the examples directory of this repository.\n\n## on_that\nOn each line put the username with access followed by a space and then the hostname.  You should have public key authentication already setup on the host for the user specified.  See the example on_that in the examples directory of this repository.\n\n## Docker\nFirst, retrieve the image from Docker Hub:\n```\ndocker pull irlrobot/dtot\n```\n\nNext, create your do_this and on_that files in a directory on your local machine. I typically just use ~/Desktop on my Mac. \n\nFinally, run the below from the directory where your do_this and on_that files are located:\n```\ndocker run --rm \\\n    -v ~/.ssh/id_rsa:/root/.ssh/id_rsa \\\n    -v ~/.ssh/id_rsa.pub:/root/.ssh/id_rsa.pub \\\n    -v ~/Desktop/do_this:/dtot/commands \\\n    -v ~/Desktop/on_that:/dtot/hosts \\\n    dtot\n```\n\nNOTE: The Docker image currently only supports SSH keys without a passphrase.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseajoshc%2Fdothisonthat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseajoshc%2Fdothisonthat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseajoshc%2Fdothisonthat/lists"}