{"id":13569990,"url":"https://github.com/andrewpillar/cl","last_synced_at":"2025-08-03T21:32:01.551Z","repository":{"id":57494742,"uuid":"168042282","full_name":"andrewpillar/cl","owner":"andrewpillar","description":"Concurrently run commands across multiple servers via SSH","archived":false,"fork":false,"pushed_at":"2022-11-11T19:35:42.000Z","size":13,"stargazers_count":46,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-05T02:36:10.116Z","etag":null,"topics":["go","ssh","ssh-command"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/andrewpillar.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-28T21:42:00.000Z","updated_at":"2023-03-13T01:51:23.000Z","dependencies_parsed_at":"2022-08-28T19:40:49.122Z","dependency_job_id":null,"html_url":"https://github.com/andrewpillar/cl","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewpillar%2Fcl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewpillar%2Fcl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewpillar%2Fcl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewpillar%2Fcl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrewpillar","download_url":"https://codeload.github.com/andrewpillar/cl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228567027,"owners_count":17937986,"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":["go","ssh","ssh-command"],"created_at":"2024-08-01T14:00:46.852Z","updated_at":"2024-12-07T06:08:04.705Z","avatar_url":"https://github.com/andrewpillar.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# cl\n\ncl is a simple tool that allows you to run multiple commands concurrently\nacross a cluster of servers via SSH. It works by taking the name of the cluster\nto run the command across, followed by the command to run like so.\n\n    $ cl uat systemctl status postgresql\n\ncl expects a `ClFile` to be in the current directory from where the\ncommand is invoked. This is a plain-text file that describes the cluster, and\nhow they can be accessed via SSH.\n\n    uat:\n      db@db-host-1 ~/.ssh/id_rsa\n      db@db-host-2 ~/.ssh/id_rsa\n      db@db-host-3 ~/.ssh/id_rsa\n\n## The ClFile\n\nThe `ClFile` expects the cluster of servers to be organised in the below format,\nwhere the heading is the name that will be used via the command, and each\nsubsequent entry is the server to connect to.\n\n    # Comment's are prefixed with '#'.\n    [name]:\n      [user]@[host]:[port] [identity]\n\n**[name]:**\n\nA human readable string that specifies the alias for the cluster machines.\n\n\n**[user]**\n\nThe user to connect to the machine as, if not specified then `$USER` will be\nused instead.\n\n**[host]**\n\nThe host to connect to, this is always required.\n\n**[port]**\n\nThe port to connect to on the machine, if not specified then `22` will be used\ninstead.\n\n**[identity]**\n\nThe identity file to use during SSH authentication, if not specified then\n`~/.ssh/id_rsa` will be used by default.\n\nThere is no limit to the number of clusters that can be specifed in the `ClFile`.\n\n    uat:\n      db@db-host-1 ~/.ssh/id_rsa\n      db@db-host-2 ~/.ssh/id_rsa\n      db@db-host-3 ~/.ssh/id_rsa\n    \n    prod:\n      db@prod-db-host1:1234 ~/.ssh/id_prod_db\n      prod-db-host2:44\n      prod-db-host3 ~/.ssh/id_rsa\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewpillar%2Fcl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewpillar%2Fcl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewpillar%2Fcl/lists"}