<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>My SysAd Blog</title>
    <link>https://www.mysysad.com/archive.html</link>
    <atom:link href="https://www.mysysad.com/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Terse sysadmin HOWTOs, fixes and notes from mysysad.com, since 2006.</description>
    <language>en-us</language>
    <lastBuildDate>Sun, 01 Nov 2026 22:55:00 -0600</lastBuildDate>
    <item>
      <title>Delete a Bunch of Files on GitHub in One Commit (Press the Period Key)</title>
      <link>https://www.mysysad.com/2026/11/delete-many-files-on-github-in-one-commit.html</link>
      <guid isPermaLink="true">https://www.mysysad.com/2026/11/delete-many-files-on-github-in-one-commit.html</guid>
      <pubDate>Sun, 01 Nov 2026 22:55:00 -0600</pubDate>
      <category>Files &amp; disks</category>
      <description>GitHub&#x27;s website deletes one file per commit. Press the period key to open the repo in VS Code in your browser, delete files in bulk and commit once.</description>
      <content:encoded><![CDATA[<p>Tonight I cleaned out my site's repo on GitHub. Over the months, old backup copies of pages and a few test files had piled up in the folder the site is served from, and anything in that folder is public. There were about thirty of them.</p>
<p>GitHub's website will delete a file, but only one at a time, and every delete is its own commit. My site deploys from GitHub, so each of those commits would also start a new deploy. Thirty files, thirty deploys. No thanks.</p>

<h2>Press the period key</h2>
<p>On any repo page on github.com, press <code>.</code> (the period key). GitHub opens the repo in a full VS Code editor right in the browser, at github.dev. There's nothing to install. Changing <code>github.com</code> to <code>github.dev</code> in the address bar does the same thing, and so does going to <code>vscode.dev/github/you/yourrepo</code>.</p>

<h2>Delete in bulk</h2>
<ol>
<li>In the Explorer on the left, open the folder you're cleaning up.</li>
<li>Ctrl+click each file or folder you want gone (Cmd+click on a Mac). Shift+click selects a whole range.</li>
<li>Right-click any of the selected items and choose <strong>Delete</strong>. Confirm if it asks.</li>
</ol>
<p>Nothing has changed on GitHub yet. The deletes only exist in the editor until you commit.</p>

<h2>Commit once</h2>
<ol>
<li>Click the Source Control icon, the third one down on the far left. It shows a count of your changes.</li>
<li>Check the list. Every file you deleted shows up crossed out, with a D next to it.</li>
<li>Type a message, such as "Remove old backups", and click <strong>Commit &amp; Push</strong>.</li>
</ol>
<p>That's one commit, and one deploy.</p>

<h2>Bonus: move a file up a folder</h2>
<p>I also had one file I wanted to keep in the repo but off the website, so it needed to move up two folders. On the regular github.com site, open the file and click the pencil to edit it. Click at the very start of the filename box and type <code>../</code> once for each folder you want to move up. I pressed Backspace there instead, which pulls the folder names back into the box so you can delete them. Either way, the folder path shown next to the box tells you where the file will land. Then commit.</p>

<h2>Fair warning</h2>
<p>There's no undo button, and the commit goes straight to your live branch. Check the Source Control list before you push. If you do delete the wrong thing, Git still has it. Open the repo's commit history, find the file in the commit before the delete, and add it back.</p>
<p>At any rate, it beat thirty rounds of clicking Delete file.</p>]]></content:encoded>
    </item>
    <item>
      <title>Log Into GitHub Over SSH From Windows (and Why Cygwin Ate My Passphrase)</title>
      <link>https://www.mysysad.com/2026/11/log-into-github-over-ssh-from-windows.html</link>
      <guid isPermaLink="true">https://www.mysysad.com/2026/11/log-into-github-over-ssh-from-windows.html</guid>
      <pubDate>Sun, 01 Nov 2026 21:00:00 -0600</pubDate>
      <category>Users &amp; security</category>
      <description>Set up an SSH key for GitHub on Windows with PowerShell, copy the real key instead of the SHA256 fingerprint, test it, and switch your repo from HTTPS. Plus Cygwin gotchas.</description>
      <content:encoded><![CDATA[<p>I was getting ready to push some changes to this site tonight and got tired of waiting on GitHub's browser login every time. An SSH key fixes that for good. You set it up once, and after that <code>git push</code> just works. Along the way I hit nearly every snag there is, so here are the steps, plus the mistakes I made.</p>
<p>Everything below runs in PowerShell. I tried Cygwin first, and it didn't go well (more on that at the end).</p>

<h2>1. Make the key</h2>
<pre>PS&gt; ssh-keygen -t ed25519 -C "you@example.com"</pre>
<p>Press Enter to keep the default location, <code>C:\Users\you\.ssh\id_ed25519</code>. Then press Enter twice for no passphrase, or type one. If you set one, Git asks for it every time you push.</p>

<h2>2. Copy the public key, not the fingerprint</h2>
<p>When ssh-keygen finishes, it prints a line that starts with <code>SHA256:</code> and ends with your email. That's the key's fingerprint, not the key. I pasted it into GitHub anyway and got this.</p>
<pre>Key is invalid. You must supply a key in OpenSSH public key format</pre>
<p>The key itself lives in the <code>.pub</code> file. This copies it to the clipboard.</p>
<pre>PS&gt; Get-Content $HOME\.ssh\id_ed25519.pub | Set-Clipboard</pre>
<p>It's one long line that starts with <code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5</code> and ends with your email. Never copy the file without <code>.pub</code>. That one is your private key, and it stays on your machine.</p>

<h2>3. Add it to your account, not your repo</h2>
<p>The SSH keys page lives in your account settings, not in any repo. The quickest way there is to go straight to <a href="https://github.com/settings/keys" rel="noopener">github.com/settings/keys</a> while you're signed in. To click your way there, use your profile picture in the top-right corner of any GitHub page, then <strong>Settings</strong>, then <strong>SSH and GPG keys</strong> under Access in the left sidebar.</p>
<p>Click <strong>New SSH key</strong>, give it a title like "Laptop", leave Key type set to Authentication Key, paste the key into the Key box and click <strong>Add SSH key</strong>.</p>
<p>I first went looking under the repo's own Settings tab. That only has Deploy keys, which work for that one repo.</p>

<h2>4. Test it</h2>
<pre>PS&gt; ssh -T git@github.com
The authenticity of host 'github.com (140.82.112.3)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Hi you! You've successfully authenticated, but GitHub does not provide shell access.</pre>
<p>That fingerprint is the one GitHub publishes for its servers, so you know you reached the real GitHub. "No shell access" is normal.</p>

<h2>5. Switch your repo from HTTPS to SSH</h2>
<p>From inside the repo, this rewrites the remote's address in place, so you don't have to retype the repo name.</p>
<pre>PS&gt; git remote get-url origin
https://github.com/you/yourrepo.git
PS&gt; git remote set-url origin ((git remote get-url origin) -replace '^https://github\.com/', 'git@github.com:')
PS&gt; git remote get-url origin
git@github.com:you/yourrepo.git
PS&gt; git fetch</pre>
<p>If <code>git fetch</code> comes back without asking you to log in, you're done.</p>

<h2>Why Cygwin ate my passphrase</h2>
<p>I started out in Cygwin. It turned out both commands were the Windows versions, not Cygwin's.</p>
<pre>$ which git ssh
/cygdrive/c/Program Files/Git/cmd/git
/cygdrive/c/WINDOWS/System32/OpenSSH/ssh</pre>
<p>Windows programs and Cygwin's terminal window don't always agree on hidden typing. ssh-keygen asked for the passphrase twice, I typed the same thing both times, and it still said this.</p>
<pre>Passphrases do not match.  Try again.</pre>
<p>Run ssh-keygen from PowerShell and the problem goes away. Two more Cygwin gotchas: Cygwin's <code>~</code> isn't your Windows home folder, so the key is under <code>/cygdrive/c/Users/you/.ssh/</code>. And Cygwin has a handy clipboard device.</p>
<pre>$ cat /cygdrive/c/Users/you/.ssh/id_ed25519.pub &gt; /dev/clipboard</pre>

<h2>If the test just hangs</h2>
<p>Some networks block port 22, the usual SSH port. GitHub also answers SSH on port 443, which is almost never blocked. Add this to <code>C:\Users\you\.ssh\config</code> and try again.</p>
<pre>Host github.com
  Hostname ssh.github.com
  Port 443
  User git</pre>

<p>One last thing that tripped me up afterward. <code>git pull</code> updates the whole repo wherever it lives. It doesn't drop files into whatever folder you happen to be standing in. I learned that one the slow way.</p>]]></content:encoded>
    </item>
    <item>
      <title>My SysAd Blog Is Back, at Its Old Addresses</title>
      <link>https://www.mysysad.com/2026/10/my-sysad-blog-is-back.html</link>
      <guid isPermaLink="true">https://www.mysysad.com/2026/10/my-sysad-blog-is-back.html</guid>
      <pubDate>Thu, 22 Oct 2026 20:00:00 -0500</pubDate>
      <category>Off the clock</category>
      <description>All 429 My SysAd Blog posts from 2006 to 2014 are back at their original addresses, so old links work again. What changed, and how to find things in the Archive.</description>
      <content:encoded><![CDATA[<p>Back in 2006 I started My SysAd Blog on Blogger as a place to keep the commands and fixes I kept looking up at work. Terse UNIX HOWTOs, shell one-liners and troubleshooting notes, most of them written on Solaris. In 2008 it <a href="https://www.mysysad.com/2008/04/my-sysad-blog-changes-domain-name.html">moved to mysysad.com</a>, after I'd worried for a while that the traffic would dry up overnight. It didn't, and the blog kept going until 2014, when it went quiet.</p>
<p>When mysysad.com came back as a toolkit, the old posts were gone. Any old link or bookmark just led to an error page, and that bugged me. So I rebuilt all 429 posts from my old Blogger export and put each one back at its original address. A link like this one works again, exactly as it did in 2008.</p>
<p><a href="https://www.mysysad.com/2008/04/reset-user-account-password-example-for.html">www.mysysad.com/2008/04/reset-user-account-password-example-for.html</a></p>

<h2>What changed</h2>
<ul>
<li>Only small fixes, so the posts display correctly. The rest is the way I wrote it back then.</li>
<li>Every post has a note at the top about what has changed since. Most were written on Solaris, and a lot of it is history now.</li>
<li>Every post also reminds you to check commands, options and file paths against your own system before using them on a live one.</li>
<li>Most posts end with a link to the tool on this site that does the same job today.</li>
</ul>

<h2>Finding things</h2>
<p>The <a href="https://www.mysysad.com/archive.html">Archive</a> page lists every post by year and month. You can search titles and topics, or narrow the list to one topic, such as Solaris &amp; Sun, Shell &amp; text, or Networking &amp; mail. Each year and month has its own page too, like <a href="https://www.mysysad.com/2008/">2008</a>.</p>
<p>Fair warning: some of these are very much of their time. There are posts about Solaris zones, Sybase logins and the Vista On-Screen Keyboard. But a surprising number of the shell one-liners still work today, and that was the whole point of the blog.</p>
<p>Next up, new posts. It's been a while.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
