15 comments

  • tangotaylor 2 hours ago

    My favorite use of this is peer-to-peer transfer of Docker images. The Docker CLI only allows you to use registries authenticated with HTTPS but there's an exception where it allows HTTP transfers over localhost.

    So, if you use SSH tunneling to forward a port from localhost to a remote, then Docker unwittingly pushes to a remote. This is super useful "off the grid" with robotics/embedded applications where you don't want to bother with a registry and a good Internet connection.

    Example, docker pussh: https://github.com/psviderski/unregistry

    • mmh0000 32 minutes ago

      That's not quite true, you just need to add the `insecure-registries`[1] option with a list of either IP (or ip ranges) or hostnames that you want to allow without TLS.

      ```/etc/docker/daemon.json

        {
          "insecure-registries": ["10.100.0.0/24", "registry.yourmom.example.com:5000"]
        }
      
      ```

      [1] https://docs.docker.com/reference/cli/dockerd/#insecure-regi...

      • QGQBGdeZREunxLe 53 minutes ago

        This is really useful as you don't have to add an entry under insecure-registries for local registries that don't have valid certificates.

        • bitlad 50 minutes ago

          You might as well handover the images to hackers.

        • Kampfschnitzel 1 hour ago

          iirc there's a setting to allow docker to trust and use http registries

          i set it up a few years ago for my homelab

          • afiori 13 minutes ago

            Which makes me think that I have never heard of signed images/artefacts

        • buredoranna 4 hours ago

          I'll mention it here, because I learned about it here.

          "~C" will drop you into the SSH command line, allowing you to, among other things, effect port forwarding

            -L8080:localhost:443
          
          Learning that "~C" exists, and what you can do with it, has supercharged my use of SSH tunnels, which were already awesome on their own.

          But for some reason this has been disabled by default in more recent ssh configurations... to ensure its available

            -o EnableEscapeCommandline=yes
          
          or, in your ~/.ssh/config

            EnableEscapeCommandline yes
          
          (edit: formatting)
          • telotortium 4 hours ago

            Important to note that `~` SSH commands work only right after you press Enter - it doesn’t trigger everywhere you press `~`.

            Also EnableEscapeCommandline fortunately only affects `~C` - the all-important `~.` to kill a hung SSH session still works with it disabled.

            • ptaffs 2 hours ago

              so many time i have inadvertently ended a session with a fat fingered ~.

          • wbadart 3 hours ago

            I never pass up an opportunity to recommend the Cyber Plumber's Handbook: https://github.com/opsdisk/the_cyber_plumbers_handbook

            Goes over similar content as TFA, in perhaps a little more depth. Indispensable sysadmin knowledge.

            • opsdisk 3 hours ago

              Appreciate the mention wbadart!

              • ranger_danger 2 hours ago

                Not mentioning the ssh -w option in that book should be a crime.

                • susu1111 2 hours ago

                  so good, I learn new things.

                • smw 2 hours ago

                  Need to mention sshuttle [0] here, as it magically solves a bunch of these problems without constant reconfiguration

                  [0] https://github.com/sshuttle/sshuttle

                  • chasil 4 hours ago

                    The article mentions bastions, but no jumphosting?

                      ssh -J user1@bastion1,user2@bastion2 targetuser@targethost
                    
                    Edit: Jumphosting was introduced in OpenSSH 7.3 2016-08-01.

                    https://www.openssh.org/releasenotes.html

                    • dspillett 4 hours ago

                      It is surprising how many times I see this content (this version might be marked “Published: Jun 19, 2026” but I've definitely seen those exact diagrams before, starting at least a few years ago, and the same content around them in many tutorials before that) without it being updated to mention jump-hosts.

                      Support was added to OpenSSH about a decade ago? Even on a low moving Linux distro like Debian/LTS everyone should have support by now.

                    • m348e912 53 minutes ago

                      >ssh -J user1@bastion1,user2@bastion2 targetuser@targethost

                      Are you using SSH key auth or password authenticating three times when you do this?

                      • chasil 7 minutes ago

                        If you don't have an agent running with an accessible key, then you will get three password prompts, with suggestions for any default keys.

                        The final target is a pre-elliptic curve OpenSSH server, so legacy is enabled. I could probably have removed that for clarity.

                          C:\Users\me\>ssh -J me@bhost1,me@bhost2 -o KexAlgorithms=diffie-hellman-group14-sha1 -o HostKeyAlgorithms=ssh-rsa -o MACs=hmac-sha1 oracle@target
                          Enter passphrase for key 'C:\Users\me/.ssh/id_ed25519':
                          me@host1's password:
                          Enter passphrase for key 'C:\Users\me/.ssh/id_ed25519':
                          me@host2's password:
                          oracle@target's password:
                          Last login: Wed Jun 24 13:29:55 2026 from bhost2
                    • hylaride 4 hours ago

                      Learning how SSH port forwarding is great as a pseudo-vpn for everything from GUI-client database access to (in physical infra) access to web-admin tools for appliances.

                      The socks proxy support can also deal with bad web filtering and privacy issues on public wifi networks (though nowadays if you're ssh'ing to a cloud IP, you'll get lots of "bot" restrictions).

                      • bheadmaster 3 hours ago

                        If you have many different remote devices behind NATs or firewalls, a cool trick to access them all via EC2 server (or such) is to setup Remote Forwarding via UNIX socket on the server side, to devices' port 22. Preferably, UNIX socket filenames should start with a common prefix, so an SSH config can be written that will use ssh+socat in a ProxyCommand to establish the connection.

                        It's amazing how lightweight this method actually is. I have managed to connect hundreds of devices using a single EC2 nano instance.

                        • ranger_danger 1 hour ago

                          Do you have more info on this method? How is the remote forwarding actually done?

                      • segphault 4 hours ago

                        Or you could just install something like Tailscale and never have to think about it again.

                        • teddyh 5 hours ago

                          It’s amazing what you can learn by reading the manual.

                          • felooboolooomba 4 hours ago

                            It is, because manuals are often not the best way to learn things. Most software manuals are reference manuals. SSH man page isn't too bad. I learned most of my SSH knowledge from it, but I'm not sure it's the best way to do it.

                            • matltc 3 hours ago

                              For me, the best way to learn a tool is for a quick example or two showing its utility, then practicing with those, reading the man as needed on specific flags. Google or bot ”how do x" ? Repeat : done

                              Some pages have a nice up-front synopsis of flags, others put them in a wall of text. Browsing the former can supplant Google, /\b-x while paging is helpful for the latter.

                          • felooboolooomba 4 hours ago

                            As a sysadmin, one of your biggest ROI is learning the ins and outs of SSH.

                          • riobard 4 hours ago

                            There's a asymmetry here that "-R" works both for reverse static and dynamic (using SOCKS protocol) forwarding, but "-D" is required for dynamic forwarding which "-L" cannot do.

                            Why is that?

                            • hylaride 3 hours ago

                              It's historical. Some older flags could be easily extended for dynamic port support and others could not.

                            • trollbridge 5 hours ago

                              When I see one of these with obvious AI tells at the top (sentences lacking a subject or verb), I ask myself:

                              Can’t I just open up a harness and prompt “Teach me how to do X?”

                              • lfx 4 hours ago

                                I do this all the time, I have a skill/gem with instructions on how I want to receive info, how to format and so on. Really helps to go fast to get the point.

                                • Oxodao 4 hours ago

                                  Could you share it? I'd be interested to get idea to make my own

                                  • lfx 2 hours ago

                                    It goes like this: --- As an expert tutorial creator for experienced engineers, you take the input the user request and make interactive tutorial. Default style is technology, tech is mac and linux. Default style is 20mins, but you ask for the timeline. Also do not forget to provide the cost of technologies used. ---

                                • GL26 4 hours ago

                                  I personally do this, ask claude code to teach me about concepts I don't know about when it codes something, and only then I accept what it suggests to me

                                • Bender 3 hours ago

                                  Should add how to bypass MFA using phishing and SSH Multiplexing to the article.

                                  • matltc 3 hours ago

                                    Very refreshing to see a utilitarian series such as this. Disappointing that the latest ai drama gets 20x more discussion and visibility on this site

                                    • ranger_danger 2 hours ago

                                      Another option that I never see mentioned anywhere is -w which allows you to create either layer2 or layer3 tunnels via a tun(4) interface.