{"id":177213,"date":"2022-10-05T08:00:33","date_gmt":"2022-10-05T12:00:33","guid":{"rendered":"https:\/\/spin.atomicobject.com\/?p=176717&#038;preview=true&#038;preview_id=176717"},"modified":"2023-06-01T15:22:40","modified_gmt":"2023-06-01T19:22:40","slug":"ssh-keys-linux","status":"publish","type":"post","link":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/","title":{"rendered":"Using Your SSH Keys in WSL in 2022"},"content":{"rendered":"<p>The <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/\">Windows Subsystem for Linux<\/a> (a.k.a. WSL) is, I have to say, the best thing to come to Windows in ages. A first-class way to run a real Linux distribution with solid integration? Yes, please. But there&#8217;s one problem with the out-of-the-box config. My SSH keys aren&#8217;t available, which makes Git and the like extremely annoying to use. So I set out to fix that.<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Secure_Shell\">SSH<\/a> is not just a way to get access to the shell on a remote system. It&#8217;s a <a href=\"https:\/git-multiple-ssh-keys\/\">building block<\/a> for all sorts of automations, such as Git, that can ride along on that connection.<\/p>\n<p>To use SSH, you need to authenticate to the remote system. SSH keys\u2014actually public\/private key pairs \u2014 automate this. SSH uses your private key, stored on the client side, to authenticate to an SSH server that trusts your public key.<\/p>\n<p>It&#8217;s such an important part of the Unix ecosystem that macOS and Linux distributions alike have first-class <a href=\"https:\/\/en.wikipedia.org\/wiki\/Keychain_(software)\">keychain<\/a> support for SSH keys. When you log in, your keychain is unlocked, and your private keys stored there are then available to SSH sessions, securely.<\/p>\n<p>On Windows, the SSH key picture has long been a bit more complex, requiring third-party software. But in 2022, that&#8217;s no longer the case for core Windows.<\/p>\n<h2>Using Windows&#8217; Built-in SSH Support<\/h2>\n<p>Modern Windows ships with <a href=\"https:\/\/www.openssh.com\/\">OpenSSH<\/a> as an optional feature. It may even already be turned on. Search in Settings for &#8220;Optional features&#8221; and turn on &#8220;OpenSSH Client&#8221; if it isn&#8217;t already.<\/p>\n<p>Keys are next. If you don&#8217;t already have SSH keys, you can generate new ones.<\/p>\n<p>Even if you <em>do<\/em> have existing keys, it might be worth generating new ones, using the superior ed25519 algorithm. Or, you could do what I do, and create keys for every system, so you don&#8217;t have to copy private keys around and can remove individual system keys when necessary.<\/p>\n<p>You can do this at the command line. I recommend setting a passphrase to avoid writing your private key unencrypted to a file, but don&#8217;t worry \u2014 you won&#8217;t need it often.<\/p>\n<pre><code>ssh-keygen -t ed25519<\/code><\/pre>\n<p>This will generate keys in <code>.ssh<\/code> in your home directory. The file ending in <code>.pub<\/code> is your public key, which you can set up with servers you want to access, <a href=\"https:\/\/docs.github.com\/en\/authentication\/connecting-to-github-with-ssh\/adding-a-new-ssh-key-to-your-github-account\">such as GitHub<\/a>.<\/p>\n<p>The file that <em>doesn&#8217;t<\/em> end in <code>.pub<\/code> (e.g. <code>id_ed25519<\/code>) is your private key \u2014 don&#8217;t share that one.<\/p>\n<p>At this point, you can use your new key. If you don&#8217;t have a specific SSH host to connect to, try this:<\/p>\n<pre><code>ssh git@github.com<\/code><\/pre>\n<p>If you used a passphrase, you&#8217;ll be prompted for it. (Of course, you don&#8217;t get a shell at GitHub. But if it takes your passphrase, you know you&#8217;ve set everything up right.)<\/p>\n<p>But we don&#8217;t want to type passphrases all the time. That&#8217;s where an agent comes in.<\/p>\n<h2>The OpenSSH Authentication Agent<\/h2>\n<p>When we used SSH in the dark days of terminal-first Unix, we set up our sessions with the ssh-agent program. This background program was responsible for holding our SSH keys and doing the authentication for us, so we didn&#8217;t have to unlock them every time we wanted to use SSH. This required some fancy scripting in our shell startup scripts.<\/p>\n<p>Windows has its own version of ssh-agent, now, too! And it&#8217;s much more convenient to use. In an elevated PowerShell, run this:<\/p>\n<pre><code class=\"lang-powershell\">Set-Service ssh-agent -StartupType Automatic\nStart-Service ssh-agent<\/code><\/pre>\n<p>You can now use ssh-add to add your private key to the agent:<\/p>\n<pre><code>ssh-add .ssh\\id_ed25519<\/code><\/pre>\n<p>If you had a passphrase, you&#8217;ll be prompted for it one last time as your key is installed into the agent.<\/p>\n<p>Now try your SSH command from the last section again. You&#8217;ll get right in.<\/p>\n<p>(If it doesn&#8217;t work, check that you&#8217;re using the correct SSH \u2014 Git for Windows includes its own, and you want to use the one <em>from<\/em> Windows. It&#8217;s in <code>System32<\/code>, <code>OpenSSH<\/code> in your Windows directory. If you have this problem, consider setting the environment variable <code>GIT_SSH<\/code> to <code>%windir%\\System32\\OpenSSH\\ssh.exe<\/code>.)<\/p>\n<p>You&#8217;ll never have to unlock that key again, even after you reboot. In fact, you can even <em>delete<\/em> the private key from your <code>.ssh<\/code> directory now, as the agent is keeping it.<\/p>\n<h2>A Little Help from Friends<\/h2>\n<p>If you hop into your WSL session now, you&#8217;ll find that while you probably have SSH tools available, they <em>don&#8217;t<\/em> know about the key you put into the agent.<\/p>\n<p>This is because, in Unix land, ssh-agent uses a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Unix_domain_socket\">Unix socket<\/a> for communicating with the agent. And on the Windows side, ssh-agent is using a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Named_pipe#In_Windows\">named pipe<\/a>.<\/p>\n<p>Connecting the two gets us access to ssh-agent inside WSL. We can do that with the help of two tools working in concert: <a href=\"https:\/\/github.com\/jstarks\/npiperelay\">npiperelay<\/a> running in Windows, and <a href=\"https:\/\/linux.die.net\/man\/1\/socat\">socat<\/a> in Linux.<\/p>\n<p>Installing npiperelay takes just a little bit, since it&#8217;s only distributed in source form. Thankfully, <a href=\"https:\/\/go.dev\/\">Go<\/a> makes it easy to build.<\/p>\n<pre><code>winget install Go.GoLang.Go.1.19<\/code><\/pre>\n<p>Restart your shell to pick up the path change, then:<\/p>\n<pre><code>go install github.com\/jstarks\/npiperelay@latest<\/code><\/pre>\n<p>By default, this will build and install npiperelay into <code>$env:HOMEPATH\\go\\bin<\/code>.<\/p>\n<p>Now, over in WSL, install socat. On Ubuntu, for example:<\/p>\n<pre><code>sudo apt install socat<\/code><\/pre>\n<p>You can now test out building a relay with this command, in WSL. (Make sure you&#8217;ve first started a new shell to pick up the PATH change for Go binaries, so that <code>which<\/code> will work properly.)<\/p>\n<pre><code class=\"lang-bash\">socat \\\n    UNIX-LISTEN:\"$HOME\/.ssh\/wsl-ssh-agent.sock\",fork \\\n    EXEC:\"$(which npiperelay.exe) \\\n              -ei -s \/\/.\/pipe\/openssh-ssh-agent\",nofork 2>&1 &<\/code><\/pre>\n<p>If all goes well, you can try to list your keys from WSL:<\/p>\n<pre><code>SSH_AUTH_SOCK=$HOME\/.ssh\/wsl-ssh-agent.sock ssh-add -L<\/code><\/pre>\n<p>(If it <em>doesn&#8217;t<\/em> go well, you may be running into an issue with SSH versions, particularly if you&#8217;re running on Windows 10. Try <a href=\"https:\/\/github.com\/PowerShell\/Win32-OpenSSH\/releases\/\">a newer release<\/a> on the Windows side. You&#8217;ll have to restart services after installing; double-check the agent service in the Services app to make sure it&#8217;s pointing to the correct path afterward.)<\/p>\n<p>Congratulations! You&#8217;ve started a relay to make your Windows SSH agent available in WSL.<\/p>\n<p>You can make this start up with your WSL shells by using <a href=\"https:\/\/github.com\/mattieb\/wsl-ssh-agent\/blob\/master\/docs\/wsl-ssh-agent-relay\">this script<\/a>, which wraps the socat invocation with service management. Follow the directions at the top of the script, and set <code>RELAY_BIN<\/code> like this:<\/p>\n<pre><code>RELAY_BIN=\"$(which npiperelay.exe)\"<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>The Windows Subsystem for Linux (a.k.a. WSL) is, I have to say, the best thing to come to Windows in ages. A first-class way to run a real Linux distribution with solid integration? Yes, please. But there&#8217;s one problem with the out-of-the-box config. My SSH keys aren&#8217;t available, which makes Git and the like extremely [&hellip;]<\/p>\n","protected":false},"author":642,"featured_media":320834,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1691],"tags":[606,673],"series":[],"class_list":["post-177213","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-linux","tag-ssh"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using Your SSH Keys in Windows Subsystem for Linux<\/title>\n<meta name=\"description\" content=\"WSL is great but has one weakness \u2014 it doesn&#039;t know about your Windows SSH keys. Learn how to solve that problem with a few tools inside.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Your SSH Keys in Windows Subsystem for Linux\" \/>\n<meta property=\"og:description\" content=\"WSL is great but has one weakness \u2014 it doesn&#039;t know about your Windows SSH keys. Learn how to solve that problem with a few tools inside.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/\" \/>\n<meta property=\"og:site_name\" content=\"Atomic Spin\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/atomicobject\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-05T12:00:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-01T19:22:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mattie Behrens\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@zigg\" \/>\n<meta name=\"twitter:site\" content=\"@atomicobject\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mattie Behrens\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/\"},\"author\":{\"name\":\"Mattie Behrens\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#\\\/schema\\\/person\\\/35cb1e28b0cf5de9d187126630724164\"},\"headline\":\"Using Your SSH Keys in WSL in 2022\",\"datePublished\":\"2022-10-05T12:00:33+00:00\",\"dateModified\":\"2023-06-01T19:22:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/\"},\"wordCount\":1003,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/atomicobject.com\\\/\"},\"image\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg\",\"keywords\":[\"Linux\",\"ssh\"],\"articleSection\":[\"DevOps &amp; System Admin.\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/\",\"name\":\"Using Your SSH Keys in Windows Subsystem for Linux\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg\",\"datePublished\":\"2022-10-05T12:00:33+00:00\",\"dateModified\":\"2023-06-01T19:22:40+00:00\",\"description\":\"WSL is great but has one weakness \u2014 it doesn't know about your Windows SSH keys. Learn how to solve that problem with a few tools inside.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/ssh-keys-linux\\\/#primaryimage\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg\",\"contentUrl\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg\",\"width\":2560,\"height\":1707,\"caption\":\"SSH keys on macOS, part 1: simple and safe\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#website\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/\",\"name\":\"Atomic Spin\",\"description\":\"Atomic Object\u2019s blog on everything we find fascinating.\",\"publisher\":{\"@id\":\"https:\\\/\\\/atomicobject.com\\\/\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/spin.atomicobject.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#organization\",\"name\":\"Atomic Object\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/AO-Logo-Emblem-Color.png\",\"contentUrl\":\"https:\\\/\\\/spin.atomicobject.com\\\/wp-content\\\/uploads\\\/AO-Logo-Emblem-Color.png\",\"width\":258,\"height\":244,\"caption\":\"Atomic Object\"},\"image\":{\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/atomicobject\",\"https:\\\/\\\/x.com\\\/atomicobject\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/spin.atomicobject.com\\\/#\\\/schema\\\/person\\\/35cb1e28b0cf5de9d187126630724164\",\"name\":\"Mattie Behrens\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d77a214a0e61962a71f7d0765f81271bbaf0a8566300c94e9adf7a428700e611?s=96&d=blank&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d77a214a0e61962a71f7d0765f81271bbaf0a8566300c94e9adf7a428700e611?s=96&d=blank&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d77a214a0e61962a71f7d0765f81271bbaf0a8566300c94e9adf7a428700e611?s=96&d=blank&r=pg\",\"caption\":\"Mattie Behrens\"},\"description\":\"They\\\/them. Software Consultant &amp; Developer at Atomic Object Ann Arbor. Loves computer networks and correctness in software development. Always digging for the hidden assumption.\",\"sameAs\":[\"https:\\\/\\\/www.zigg.com\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/mattbehrens\",\"https:\\\/\\\/x.com\\\/zigg\"],\"url\":\"https:\\\/\\\/spin.atomicobject.com\\\/author\\\/mattie-behrens\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using Your SSH Keys in Windows Subsystem for Linux","description":"WSL is great but has one weakness \u2014 it doesn't know about your Windows SSH keys. Learn how to solve that problem with a few tools inside.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/","og_locale":"en_US","og_type":"article","og_title":"Using Your SSH Keys in Windows Subsystem for Linux","og_description":"WSL is great but has one weakness \u2014 it doesn't know about your Windows SSH keys. Learn how to solve that problem with a few tools inside.","og_url":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/","og_site_name":"Atomic Spin","article_publisher":"https:\/\/www.facebook.com\/atomicobject","article_published_time":"2022-10-05T12:00:33+00:00","article_modified_time":"2023-06-01T19:22:40+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg","type":"image\/jpeg"}],"author":"Mattie Behrens","twitter_card":"summary_large_image","twitter_creator":"@zigg","twitter_site":"@atomicobject","twitter_misc":{"Written by":"Mattie Behrens","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/#article","isPartOf":{"@id":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/"},"author":{"name":"Mattie Behrens","@id":"https:\/\/spin.atomicobject.com\/#\/schema\/person\/35cb1e28b0cf5de9d187126630724164"},"headline":"Using Your SSH Keys in WSL in 2022","datePublished":"2022-10-05T12:00:33+00:00","dateModified":"2023-06-01T19:22:40+00:00","mainEntityOfPage":{"@id":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/"},"wordCount":1003,"commentCount":0,"publisher":{"@id":"https:\/\/atomicobject.com\/"},"image":{"@id":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg","keywords":["Linux","ssh"],"articleSection":["DevOps &amp; System Admin."],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/spin.atomicobject.com\/ssh-keys-linux\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/","url":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/","name":"Using Your SSH Keys in Windows Subsystem for Linux","isPartOf":{"@id":"https:\/\/spin.atomicobject.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/#primaryimage"},"image":{"@id":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/#primaryimage"},"thumbnailUrl":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg","datePublished":"2022-10-05T12:00:33+00:00","dateModified":"2023-06-01T19:22:40+00:00","description":"WSL is great but has one weakness \u2014 it doesn't know about your Windows SSH keys. Learn how to solve that problem with a few tools inside.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/spin.atomicobject.com\/ssh-keys-linux\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/spin.atomicobject.com\/ssh-keys-linux\/#primaryimage","url":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg","contentUrl":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/ssh-keys-linux-JillDeVriesPhotography-AO2022-159-scaled-1.jpg","width":2560,"height":1707,"caption":"SSH keys on macOS, part 1: simple and safe"},{"@type":"WebSite","@id":"https:\/\/spin.atomicobject.com\/#website","url":"https:\/\/spin.atomicobject.com\/","name":"Atomic Spin","description":"Atomic Object\u2019s blog on everything we find fascinating.","publisher":{"@id":"https:\/\/atomicobject.com\/"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/spin.atomicobject.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/spin.atomicobject.com\/#organization","name":"Atomic Object","url":"https:\/\/spin.atomicobject.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/spin.atomicobject.com\/#\/schema\/logo\/image\/","url":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO-Logo-Emblem-Color.png","contentUrl":"https:\/\/spin.atomicobject.com\/wp-content\/uploads\/AO-Logo-Emblem-Color.png","width":258,"height":244,"caption":"Atomic Object"},"image":{"@id":"https:\/\/spin.atomicobject.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/atomicobject","https:\/\/x.com\/atomicobject"]},{"@type":"Person","@id":"https:\/\/spin.atomicobject.com\/#\/schema\/person\/35cb1e28b0cf5de9d187126630724164","name":"Mattie Behrens","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d77a214a0e61962a71f7d0765f81271bbaf0a8566300c94e9adf7a428700e611?s=96&d=blank&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/d77a214a0e61962a71f7d0765f81271bbaf0a8566300c94e9adf7a428700e611?s=96&d=blank&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d77a214a0e61962a71f7d0765f81271bbaf0a8566300c94e9adf7a428700e611?s=96&d=blank&r=pg","caption":"Mattie Behrens"},"description":"They\/them. Software Consultant &amp; Developer at Atomic Object Ann Arbor. Loves computer networks and correctness in software development. Always digging for the hidden assumption.","sameAs":["https:\/\/www.zigg.com\/","https:\/\/www.linkedin.com\/in\/mattbehrens","https:\/\/x.com\/zigg"],"url":"https:\/\/spin.atomicobject.com\/author\/mattie-behrens\/"}]}},"_links":{"self":[{"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/posts\/177213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/users\/642"}],"replies":[{"embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/comments?post=177213"}],"version-history":[{"count":0,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/posts\/177213\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/media\/320834"}],"wp:attachment":[{"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/media?parent=177213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/categories?post=177213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/tags?post=177213"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/spin.atomicobject.com\/wp-json\/wp\/v2\/series?post=177213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}