<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: ssh</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/ssh.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-01-22T23:57:50+00:00</updated><author><name>Simon Willison</name></author><entry><title>SSH has no Host header</title><link href="https://simonwillison.net/2026/Jan/22/ssh-has-no-host-header/#atom-tag" rel="alternate"/><published>2026-01-22T23:57:50+00:00</published><updated>2026-01-22T23:57:50+00:00</updated><id>https://simonwillison.net/2026/Jan/22/ssh-has-no-host-header/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.exe.dev/ssh-host-header"&gt;SSH has no Host header&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;a href="https://exe.dev/"&gt;exe.dev&lt;/a&gt; is a new hosting service that, for $20/month, gives you up to 25 VMs "that share 2 CPUs and 8GB RAM". Everything happens over SSH, including creating new VMs. Once configured you can sign into your exe.dev VMs like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh simon.exe.dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here's the clever bit: when you run the above command &lt;code&gt;exe.dev&lt;/code&gt; signs you into your VM of that name... but they don't assign every VM its own IP address and SSH has no equivalent of the Host header, so how does their load balancer know &lt;em&gt;which&lt;/em&gt; of your VMs to forward you on to?&lt;/p&gt;
&lt;p&gt;The answer is that while they don't assign a unique IP to every VM they &lt;em&gt;do&lt;/em&gt; have enough IPs that they can ensure each of your VMs has an IP that is unique to your account.&lt;/p&gt;
&lt;p&gt;If I create two VMs they will each resolve to a separate IP address, each of which is shared with many other users. The underlying infrastructure then identifies my user account from my SSH public key and can determine which underlying VM to forward my SSH traffic to.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://lobste.rs/s/7oqiqi/ssh_has_no_host_header"&gt;lobste.rs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/dns"&gt;dns&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hosting"&gt;hosting&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;&lt;/p&gt;



</summary><category term="dns"/><category term="hosting"/><category term="ssh"/></entry><entry><title>Restricting SSH connections to devices within a Tailscale network</title><link href="https://simonwillison.net/2020/Apr/23/restricting-ssh-connections-tailscale/#atom-tag" rel="alternate"/><published>2020-04-23T18:28:05+00:00</published><updated>2020-04-23T18:28:05+00:00</updated><id>https://simonwillison.net/2020/Apr/23/restricting-ssh-connections-tailscale/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/simonw/til/blob/master/tailscale/lock-down-sshd.md"&gt;Restricting SSH connections to devices within a Tailscale network&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
TIL how to run SSH on a VPS instance (in this case Amazon Lightsail) such that it can only be SSHd to by devices connected to a private Tailscale VPN.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tailscale"&gt;tailscale&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/til"&gt;til&lt;/a&gt;&lt;/p&gt;



</summary><category term="security"/><category term="ssh"/><category term="tailscale"/><category term="til"/></entry><entry><title>Fabric 0.9.0</title><link href="https://simonwillison.net/2009/Nov/9/fabric/#atom-tag" rel="alternate"/><published>2009-11-09T14:02:53+00:00</published><updated>2009-11-09T14:02:53+00:00</updated><id>https://simonwillison.net/2009/Nov/9/fabric/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://pypi.python.org/pypi/Fabric/0.9.0"&gt;Fabric 0.9.0&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A Python-based SSH automation and deployment tool. Released today, 0.9.0 is finally the official “stable” release—which is good, as it breaks API compatibility with previous versions and caused me all sorts of confusion when I tried to learn Fabric recently.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/deployment"&gt;deployment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fabric"&gt;fabric&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;&lt;/p&gt;



</summary><category term="deployment"/><category term="fabric"/><category term="python"/><category term="ssh"/></entry><entry><title>How We Made GitHub Fast</title><link href="https://simonwillison.net/2009/Oct/21/github/#atom-tag" rel="alternate"/><published>2009-10-21T21:14:38+00:00</published><updated>2009-10-21T21:14:38+00:00</updated><id>https://simonwillison.net/2009/Oct/21/github/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/blog/530-how-we-made-github-fast"&gt;How We Made GitHub Fast&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Detailed overview of the new GitHub architecture. It’s a lot more complicated than I would have expected—lots of moving parts are involved in ensuring they can scale horizontally when they need to. Interesting components include nginx, Unicorn, Rails, DRBD, HAProxy, Redis, Erlang, memcached, SSH, git and a bunch of interesting new open source projects produced by the GitHub team such as BERT/Ernie and ProxyMachine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/drbd"&gt;drbd&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ernie"&gt;ernie&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/git"&gt;git&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/haproxy"&gt;haproxy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/memcached"&gt;memcached&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nginx"&gt;nginx&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/proxymachine"&gt;proxymachine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rails"&gt;rails&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/redis"&gt;redis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/replication"&gt;replication&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unicorn"&gt;unicorn&lt;/a&gt;&lt;/p&gt;



</summary><category term="drbd"/><category term="erlang"/><category term="ernie"/><category term="git"/><category term="github"/><category term="haproxy"/><category term="memcached"/><category term="nginx"/><category term="proxymachine"/><category term="rails"/><category term="redis"/><category term="replication"/><category term="ruby"/><category term="scaling"/><category term="ssh"/><category term="unicorn"/></entry><entry><title>jessenoller.com - python magazine</title><link href="https://simonwillison.net/2009/Feb/5/jessenollercom/#atom-tag" rel="alternate"/><published>2009-02-05T23:10:43+00:00</published><updated>2009-02-05T23:10:43+00:00</updated><id>https://simonwillison.net/2009/Feb/5/jessenollercom/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jessenoller.com/category/python-magazine/"&gt;jessenoller.com - python magazine&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jesse Noller has been sharing his articles originally published in Python Magazine. Topics include SSH programming with Paramiko, context managers and the with statement and an excellent explanation of Python’s threading support and the global interpreter lock.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/contextmanagers"&gt;contextmanagers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gil"&gt;gil&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jesse-noller"&gt;jesse-noller&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/paramiko"&gt;paramiko&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pythonmagazine"&gt;pythonmagazine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/threads"&gt;threads&lt;/a&gt;&lt;/p&gt;



</summary><category term="contextmanagers"/><category term="gil"/><category term="jesse-noller"/><category term="paramiko"/><category term="python"/><category term="pythonmagazine"/><category term="ssh"/><category term="threads"/></entry><entry><title>ExpanDrive</title><link href="https://simonwillison.net/2008/Mar/4/daring/#atom-tag" rel="alternate"/><published>2008-03-04T19:32:34+00:00</published><updated>2008-03-04T19:32:34+00:00</updated><id>https://simonwillison.net/2008/Mar/4/daring/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://daringfireball.net/2008/03/expandrive"&gt;ExpanDrive&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Looks like this SFTP mounting application for OS X fixes the problems I’ve had with sshfs (which tends to freeze things up if you lose your network connection while using it).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/expandrive"&gt;expandrive&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-gruber"&gt;john-gruber&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sftp"&gt;sftp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sshfs"&gt;sshfs&lt;/a&gt;&lt;/p&gt;



</summary><category term="expandrive"/><category term="john-gruber"/><category term="sftp"/><category term="ssh"/><category term="sshfs"/></entry><entry><title>Net::SSH revisited</title><link href="https://simonwillison.net/2007/Aug/1/buckblogs/#atom-tag" rel="alternate"/><published>2007-08-01T10:42:20+00:00</published><updated>2007-08-01T10:42:20+00:00</updated><id>https://simonwillison.net/2007/Aug/1/buckblogs/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://weblog.jamisbuck.org/2007/7/29/net-ssh-revisited"&gt;Net::SSH revisited&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Dependency injection (at least in Ruby) officially isn’t cool any more.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.labnotes.org/2007/07/30/rounded-corners-129-technochasm/"&gt;Assaf Arkin&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/assaf-arkin"&gt;assaf-arkin&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dependencyinjection"&gt;dependencyinjection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jamis-buck"&gt;jamis-buck&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;&lt;/p&gt;



</summary><category term="assaf-arkin"/><category term="dependencyinjection"/><category term="jamis-buck"/><category term="ruby"/><category term="ssh"/></entry><entry><title>SSH ControlPath/ControlMaster</title><link href="https://simonwillison.net/2006/Dec/18/ssh/#atom-tag" rel="alternate"/><published>2006-12-18T11:53:20+00:00</published><updated>2006-12-18T11:53:20+00:00</updated><id>https://simonwillison.net/2006/Dec/18/ssh/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.torchbox.com/blog/ssh_tips_2.html"&gt;SSH ControlPath/ControlMaster&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
How to get OpenSSH v4 and above to re-use an existing SSH connection for multiple sessions, dramatically speeding up connection start times.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/nick-burch"&gt;nick-burch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/torchbox"&gt;torchbox&lt;/a&gt;&lt;/p&gt;



</summary><category term="nick-burch"/><category term="ssh"/><category term="torchbox"/></entry><entry><title>Secure wireless email on Mac OS X</title><link href="https://simonwillison.net/2005/Feb/8/secure/#atom-tag" rel="alternate"/><published>2005-02-08T11:20:20+00:00</published><updated>2005-02-08T11:20:20+00:00</updated><id>https://simonwillison.net/2005/Feb/8/secure/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.stopdesign.com/log/2005/02/07/secure-email.html"&gt;Secure wireless email on Mac OS X&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Doug Bowman’s tutorial on SSH Tunnel Manager and wireless security.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/douglas-bowman"&gt;douglas-bowman&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/email"&gt;email&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;&lt;/p&gt;



</summary><category term="douglas-bowman"/><category term="email"/><category term="macos"/><category term="security"/><category term="ssh"/></entry></feed>