{"id":21516377,"url":"https://github.com/jsf0/standoff","last_synced_at":"2026-05-18T18:37:16.232Z","repository":{"id":239378096,"uuid":"365338173","full_name":"jsf0/standoff","owner":"jsf0","description":"agentless configuration management over SSH","archived":false,"fork":false,"pushed_at":"2021-06-24T19:32:53.000Z","size":45,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-24T02:58:57.352Z","etag":null,"topics":["agentless","ansible","configuration-management","ssh"],"latest_commit_sha":null,"homepage":"https://kernelpanic.life/software/lazy-configuration-management.html","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsf0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2021-05-07T19:48:20.000Z","updated_at":"2022-06-16T19:51:08.000Z","dependencies_parsed_at":"2024-05-12T18:48:29.388Z","dependency_job_id":null,"html_url":"https://github.com/jsf0/standoff","commit_stats":null,"previous_names":["jsf0/standoff"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsf0%2Fstandoff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsf0%2Fstandoff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsf0%2Fstandoff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsf0%2Fstandoff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsf0","download_url":"https://codeload.github.com/jsf0/standoff/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244066191,"owners_count":20392407,"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":["agentless","ansible","configuration-management","ssh"],"created_at":"2024-11-24T00:20:50.994Z","updated_at":"2026-05-18T18:37:16.189Z","avatar_url":"https://github.com/jsf0.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Codacy Badge](https://api.codacy.com/project/badge/Grade/ea9cfcc5831b449c9a1096d1dfd0037b)](https://www.codacy.com/manual/jsfierro/standoff?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=jsfierro/standoff\u0026amp;utm_campaign=Badge_Grade)\n\n## standoff\n\nStandoff is a Perl program to automate remote configuration of machines via SSH.\nIt is intended to be a much simpler alternative to Ansible. Its configuration files do not require \nany knowledge of markup languages, nor does it require any setup on the remote machines\nat all beyond running SSH. \n\nAs of right now, standoff is an unrefined work-in-progress. \n\n### Installing\n\nYou will need the following Perl modules: Net::OpenSSH and Config::IniFiles. If they are not present, \ninstall them first:\n\n```\n# cpan -i Net::OpenSSH\n# cpan -i Config::IniFiles\n```\n\nOpenBSD users are advised to use pkg_add(1) to install these modules\nrather than cpan(1):\n\n```\n# pkg_add p5-Net-OpenSSH p5-Config-IniFiles\n```\n\nTo install standoff and its man page, run:\n```\n# ./install.sh\n```\nYou may need to tweak the install locations for your platform. \n\n### Usage\n\nSee the man page (standoff.1) for full usage examples. Below is a brief explanation\nto get you running. \n\nStandoff requires a payload file in INI format. A simple example might look like this:\n \n```\n[Target]\ntarget=172.16.1.1\nssh_key=/path/to/ssh_key\n\n[Files]\nfile=httpd.conf\n\n[Commands]\ncommand=doas cp httpd.conf /etc\ncommand=doas rcctl reload httpd\n\n```\n\nThen, to run standoff, run:\n```\nstandoff -f payload_file.ini\n```\n\nThis will upload a file called httpd.conf into the remote user's home directory, then execute\nthe commands in the Commands section. \nAny files are always uploaded before commands\nare executed on the remote machine, so if you need to move them to the correct locations on the target, you can put \nthe commands to do so in the commands section.\nThe ssh_key parameter is optional. If you don't provide one, standoff will \nattempt to connect to the target with passphrase-based authentication.\n\nMore complex example payload files can be found in the examples/ directory. \n\nstandoff can also be run in \"pull\" mode by specifying the -p option.\nThis will connect to the server in the [Target] section, download any files requested in the\n[Files] section, and then locally run the commands from the [Commands] section.\nThis is especially useful when combined with cron, as it can be used to remotely manage\nendpoints even if they are behind NAT and/or firewalls. \n\n### Limitations\n\nThe user-facing connection options for SSH are limited. This is to avoid too many knobs, but\nsome edge cases may require more fine-tuning for successful connections.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsf0%2Fstandoff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsf0%2Fstandoff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsf0%2Fstandoff/lists"}