{"id":16806189,"url":"https://github.com/pkgw/msedgewin10-newssh-box","last_synced_at":"2026-05-20T09:06:11.630Z","repository":{"id":138164724,"uuid":"159250888","full_name":"pkgw/msedgewin10-newssh-box","owner":"pkgw","description":"A fully-traceable, nearly-stock Windows 10 Vagrant box with better SSH","archived":false,"fork":false,"pushed_at":"2019-10-01T18:01:50.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-12T09:52:18.777Z","etag":null,"topics":["vagrant-boxes","win32-openssh","windows-10"],"latest_commit_sha":null,"homepage":null,"language":"PowerShell","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/pkgw.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":"2018-11-27T00:20:18.000Z","updated_at":"2019-10-01T18:01:50.000Z","dependencies_parsed_at":"2023-04-08T00:48:20.920Z","dependency_job_id":null,"html_url":"https://github.com/pkgw/msedgewin10-newssh-box","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pkgw/msedgewin10-newssh-box","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgw%2Fmsedgewin10-newssh-box","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgw%2Fmsedgewin10-newssh-box/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgw%2Fmsedgewin10-newssh-box/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgw%2Fmsedgewin10-newssh-box/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pkgw","download_url":"https://codeload.github.com/pkgw/msedgewin10-newssh-box/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkgw%2Fmsedgewin10-newssh-box/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33253062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-20T04:48:54.280Z","status":"ssl_error","status_checked_at":"2026-05-20T04:48:10.851Z","response_time":356,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["vagrant-boxes","win32-openssh","windows-10"],"created_at":"2024-10-13T09:50:18.526Z","updated_at":"2026-05-20T09:06:11.605Z","avatar_url":"https://github.com/pkgw.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nearly-Stock Windows 10 Vagrant Box with Better SSH\n\nThis directory provides a [Vagrant](https://www.vagrantup.com/) “box” (virtual\nmachine) running a nearly stock version of the Windows 10 operating system,\nbut with better SSH support than the Microsoft-provided boxes. Boxes deriving\nfrom this one can provide truly headless control of a full-featured Windows VM\nof known provenance from a host running Linux or macOS.\n\n# 🚨🚨🚨 NOTE NOTE NOTE 🚨🚨🚨\n\nThe latest versions of the Microsoft VMs, “1809” and later, use [WinRM] rather\nthan an old OpenSSH in their default configuration, and newer versions of\nVagrant seem to have better support for WinRM. **The upshot is that this\nframework doesn’t work with the latest VM images, and it isn’t clear that it\nwould be worthwhile to make it work again.** I’m preserving the code for\nposterity but you should probably just configure your boxes to use WinRM directly:\n\n```\nconfig.vm.guest = :windows\nconfig.vm.boot_timeout = 1200\nconfig.vm.graceful_halt_timeout = 1200\nconfig.vm.communicator = 'winrm'\nconfig.winrm.username = \"IEUser\"\nconfig.winrm.password = \"Passw0rd!\"\n```\n\n[WinRM]: https://docs.microsoft.com/en-us/windows/win32/winrm/portal\n\n# END NOTE\n\nThe context is that Microsoft\n[provides free Windows VMs](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/)\nthat should be great for automatic software building. However, these VMs are\nconfigured in such a way that makes them very hard to use in a\nnon-interactive/headless setting, especially if your host OS is Linux where\nyour only way to communicate with them is using\n[SSH](https://en.wikipedia.org/wiki/Secure_Shell). In particular, the SSH\nserver drops you into a `sh` shell that has almost no useful commands\ninstalled, and doesn’t provide full TTY support so that interactive usage is\nextremely, extremely painful.\n\nThe files and methodology in this directory will yield a new “base box” that\nhas minimal modifications from the official VMs, but are much easier to\ninteract with. The SSH service will drop you into an interactive PowerShell,\nand the box will be provision-able in an almost-standard way. You can then\nderive your own purpose-specific boxes from this new base box.\n\n## Instructions\n\nCreating this box will require a download of about 4.5 GiB and, at its\nhigh-water mark, consume about 30 GiB of hard disk space.\n\n1. Go to the\n   [official Microsoft VM page](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/)\n   and download an image. Select a virtual machine type of “MSEdge on Win10”\n   and a platform of “Vagrant”. Start downloading the file.\n2. While that is happening, **make note of the VM version number**, which\n   appears in the “Virtual machine” dropdown menu. Set the version number as a\n   variable in your shell with a command like this:\n   ```\n   $ VMVERSION=17.17134 # \u003c== change this, maybe!\n   ```\n   We’re assuming you’re running Linux here. The version shown is the most\n   recent value as of late 2018.\n3. Record this version in a configuration file that the\n   [Vagrantfile](https://www.vagrantup.com/docs/vagrantfile/) will then look\n   at:\n   ```\n   $ echo msedgewin10_pristine_$VMVERSION \u003e.cfg_base_box\n   ```\n4. Your download should have created a file named `MSEdge.Win10.Vagrant.zip`.\n   Unzip this in the directory containing this README. You should get a file\n   named `MSEdge - Win10.box`. It is OK to delete the Zip file after this is\n   done.\n5. Run the following command to import this box into your Vagrant system as a\n   “base box”, including the VM version in the name:\n   ```\n   $ vagrant box add --name msedgewin10_pristine_$VMVERSION \"MSEdge - Win10.box\"\n   ```\n6. Boot up the Vagrant machine defined in this directory, which will change some\n   settings and upgrade the SSH server in the official VM image:\n   ```\n   $ vagrant up\n   ```\n   This will pop up a few complaints from PowerShell but the tail end of the output\n   should not show any errors.\n7. Export this Vagrant machine into its own new box file:\n   ```\n   $ vagrant package --output msedgewin10_newssh_$VMVERSION.box --vagrantfile Vagrantfile.package\n   ```\n   Note that this command bundles an internal Vagrantfile that predefines some settings\n   that make it easier to configure derived boxes.\n8. Finally, re-import your box as a new base box:\n   ```\n   $ vagrant box add --force --name msedgewin10_newssh_$VMVERSION msedgewin10_newssh_$VMVERSION.box\n   ```\n   You can delete the `.box` file after this step. You can also destroy the\n   Vagrant machine used to create the new box with the command `vagrant\n   destroy`. Lastly, you can remove the Vagrant box of the pristine Windows\n   image with `vagrant box remove msedgewin10_pristine_$VMVERSION`.\n\nThe last three steps are automated in the script `make-the-box.sh`. It’s\nrecommended that you go through the full process manually the first time,\nhowever, in case anything funky happens with your Vagrant setup.\n\nIf you create a derived box using this new box as base, you will be able to\nSSH into it and get a pretty decent interactive PowerShell prompt. To\nprovision it with a PowerShell script, use the following parameters:\n\n```\n  config.vm.provision :shell,\n                      binary: true,\n                      privileged: false,\n                      upload_path: \"C:\\\\Windows\\\\Temp\",\n                      path: \"provision.ps1\"\n```\n\nHere, `provision.ps1` would be the name of a script file next to your Vagrantfile.\n\n\n## Implementation Notes\n\nThis was *very* painful to get working.\n\nI wanted to achieve headless, fully automated operation of Windows in a\nVagrant box from a Linux box. I soon discovered that this meant that there was\nbasically only one way to interact with the Windows VM: via `vagrant ssh`.\nRuled-out options are:\n\n- `vagrant rdp` can work, but uses interactive graphics\n- `vagrant powershell` refuses to work unless the *host* OS is Windows as\n  well.\n- There’s also WinRM. **This used to be disabled on the modern.ie VM images,\n  and was extremely hard to enable, but now it is provided out of the box,\n  which basically obviates the design of this repository.**\n\nIn the VM images I tried, the interactive SSH shell is *incredibly* limited.\nFirst, it doesn’t provide an actual (pseudo)TTY interface (i.e., `tty` prints\n`not a tty`). This means that line editing barely works and programs that want\ninteractivity fail. Second, virtually no shell commands are provided. Commands\nthat are **missing** include `cp`, `more`, and `cat`. (Other images with\nbetter SSH experiences might be out there. I didn't find anything that derived\ndirectly from the official Microsoft box files, which is important to me for\nreproducibility and trust.)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkgw%2Fmsedgewin10-newssh-box","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpkgw%2Fmsedgewin10-newssh-box","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkgw%2Fmsedgewin10-newssh-box/lists"}