Ostatnio aktywny 6 months ago

Rewizja 4d733ef113de38a98878937117fe3839c2b41662

slides.md Surowy
 ____                                 __   ____ ____  _   _ 
|  _ \ _____      _____ _ __    ___  / _| / ___/ ___|| | | |
| |_) / _ \ \ /\ / / _ \ '__|  / _ \| |_  \___ \___ \| |_| |
|  __/ (_) \ V  V /  __/ |    | (_) |  _|  ___) |__) |  _  |
|_|   \___/ \_/\_/ \___|_|     \___/|_|   |____/____/|_| |_|
                                                            

Target audience

  • linux desktop CLI users
  • linux admins
  __________________________________________
 / This is the year of linux on the desktop \
|                                            |
|          ...Windows10 has WSL ;-)          |
 \                                          /
  ------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ssh-agent

The ssh-agent is a helper program that keeps track of user's identity keys and their passphrases. The agent can then use the keys to log into other servers without having the user type in a password or passphrase again. This implements a form of single sign-on (SSO).


Agent Forwarding

$ eval "$(ssh-agent -s)"
Agent pid 7715
$ ssh-add -L
The agent has no identities.
$ ssh-add ~/.ssh/id_rsa
Identity added: /Users/waja/.ssh/id_rsa (waja@Brotschneidemaschine.local)
$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCfovU+pdwsO4ubyG8kldmtFwVcfNIbJX8Qvi+4rWKmkcEx7xdz27o+CrCXyu3eSbw8q/BVNZImwbs3C4dCBZ+o7ZtHmJGYzyrIOkY1AD1kdf0tbH3boEqoL46xOx8zGIUWCcuJd+bzMw/ub/5Qf+yW6a00h4szFiREyM6k2y+0gF21ewoSKPZp+XTFFXfOoGAllJ1rhQq+PScUHHu81Ft9bl18e0SWKRJd/EOiI+2/GAb/jtYo0lxyIk1GrmZDA80Tew7Mv636zWfXUaL1Tr4Y8Wxmeetr97MLcVcY9hMZmQlcmurDqeIJdWn1IAr8IRieLJZPiMjt09LZ2EAd/TmI2lbfy3c+013qmc4YoOhXDlRgoS5qeQr/zupP1/0ATzG37pGtkomO1zz9WBafFy5ewzIU1YUArV+/PNWbVdrnIEOKmHF/YM/ZCA5JwFp7M/8FOHZrM6KvCwcnmtHOzU+0y7eHYejUHTBOIrk9/SfP37IFEELaNrEJdDokQBXpT38= waja@Brotschneidemaschine.local
$ tail -2 .ssh/config
Host *
  ForwardAgent yes
$ ssh-add -d ~/.ssh/id_rsa
Identity removed: /Users/waja/.ssh/id_rsa RSA (waja@Brotschneidemaschine.local)

Identities are not permanent

$ kill -9 7715
$ ssh-add -L
$ eval "$(ssh-agent -s)"
Agent pid 7795
$ ssh-add -L
The agent has no identities.
  • Maybe use something like
$ echo 'AddKeysToAgent yes' >> ~/.ssh/config
  • You can start ssh-agent even via systemd.

SSH Agent forwarding is nice but...


SSH ProxyCommand / ProxyJump

$ tail -7 .ssh/config
Host 192.168.66.*
  # https://www.cyberciti.biz/faq/linux-unix-ssh-proxycommand-passing-through-one-host-gateway-server/
  # https://goteleport.com/blog/ssh-proxyjump-ssh-proxycommand/
  # https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
  #ProxyJump user1@10.42.5.6:22
  #ProxyCommand ssh -q -W %h:%p user1@10.42.5.6
  ProxyCommand ssh -o 'ForwardAgent yes' 10.42.5.6 'ssh-add && nc %h %p'

  • ProxyJump can be chained by
$ ssh -J <host> -J <host>

SSHFS

$ sshfs [user@]hostname:[directory] mountpoint

More information, macFUSE and SSHFS and even SSHFS-Win. (mc is the army knife)


mc can do sftp and ssh

mc


Port Forwarding / Tunneling

SSH Tunnel


Reverse Tunneling

Reverse SSH Tunnel

Adding / Removing Tunnels within an established connection


sshuttle: where transparent proxy meets VPN meets ssh

sshuttle allows you to create a VPN connection from your machine to any remote server that you can connect to via ssh, as long as that server has a sufficiently new Python installation.

To work, you must have root access on the local machine, but you can have a normal account on the server.

It’s valid to run sshuttle more than once simultaneously on a single client machine, connecting to a different server every time, so you can be on more than one VPN at once.

If run on a router, sshuttle can forward traffic for your entire subnet to the VPN.


SSH and Visual Studio Code

Remote development over SSH
Remote Development using SSH

ssh.md Surowy

Agent Forwarding

Adding and removing keys to the agent:

waja at Brotschneidemaschine in ~
$ eval "$(ssh-agent -s)"
Agent pid 7715

waja at Brotschneidemaschine in ~
$ ssh-add -L
The agent has no identities.

waja at Brotschneidemaschine in ~
$ ssh-add ~/.ssh/id_rsa
Identity added: /Users/waja/.ssh/id_rsa (waja@Brotschneidemaschine.local)

waja at Brotschneidemaschine in ~
$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCfovU+pdwsO4ubyG8kldmtFwVcfNIbJX8Qvi+4rWKmkcEx7xdz27o+CrCXyu3eSbw8q/BVNZImwbs3C4dCBZ+o7ZtHmJGYzyrIOkY1AD1kdf0tbH3boEqoL46xOx8zGIUWCcuJd+bzMw/ub/5Qf+yW6a00h4szFiREyM6k2y+0gF21ewoSKPZp+XTFFXfOoGAllJ1rhQq+PScUHHu81Ft9bl18e0SWKRJd/EOiI+2/GAb/jtYo0lxyIk1GrmZDA80Tew7Mv636zWfXUaL1Tr4Y8Wxmeetr97MLcVcY9hMZmQlcmurDqeIJdWn1IAr8IRieLJZPiMjt09LZ2EAd/TmI2lbfy3c+013qmc4YoOhXDlRgoS5qeQr/zupP1/0ATzG37pGtkomO1zz9WBafFy5ewzIU1YUArV+/PNWbVdrnIEOKmHF/YM/ZCA5JwFp7M/8FOHZrM6KvCwcnmtHOzU+0y7eHYejUHTBOIrk9/SfP37IFEELaNrEJdDokQBXpT38= waja@Brotschneidemaschine.local

waja at Brotschneidemaschine in ~
$ tail -2 .ssh/config 
Host *
  ForwardAgent yes

waja at Brotschneidemaschine in ~
$ ssh-add -d ~/.ssh/id_rsa
Identity removed: /Users/waja/.ssh/id_rsa RSA (waja@Brotschneidemaschine.local)

Identities are not permanent, maybe use something like echo 'AddKeysToAgent yes' >> ~/.ssh/config.

waja in 🌐 jumphost in ~
✦ ❯ kill -9 7715

waja in 🌐 jumphost in ~
✦ ❯ ssh-add -L
Error connecting to agent: Connection refused

waja in 🌐 jumphost in ~
✦ ❯ eval "$(ssh-agent -s)"
Agent pid 7795

waja in 🌐 jumphost in ~
✦ ❯ ssh-add -L
The agent has no identities.

You can start ssh-agent even via systemd.

SSH Agent forwarding is nice but...

You should only add servers you trust and that you intend to use with agent forwarding. Why using SSH agent-forwarding is a Bad Idea

SSH ProxyCommand / ProxyJump

~ via ☕ via  
✦ ❯ tail -7 .ssh/config 
Host 192.168.66.*
  # https://www.cyberciti.biz/faq/linux-unix-ssh-proxycommand-passing-through-one-host-gateway-server/
  # https://goteleport.com/blog/ssh-proxyjump-ssh-proxycommand/
  # https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
  #ProxyJump user1@10.42.5.6:22
  #ProxyCommand ssh -q -W %h:%p user1@10.42.5.6
  ProxyCommand ssh -o 'ForwardAgent yes' 10.42.5.6 'ssh-add && nc %h %p'

ProxyJump can be chained by ssh -J <host> -J <host>.

SSH Multiplexing

~ via ☕ via  
✦ ❯ tail -8 .ssh/config 
Host *
  # https://www.cyberciti.biz/faq/linux-unix-reuse-openssh-connection/
  # https://blog.scottlowe.org/2015/12/11/using-ssh-multiplexing/
  # https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing
  ControlPath ~/.ssh/controlmasters/%r@%h:%p
  ControlMaster auto
  ControlPersist yes
  MaxSessions 10

SSHFS

sshfs [user@]hostname:[directory] mountpoint

More information, macFUSE and SSHFS and even SSHFS-Win. (mc is the amry knife)

Port Forwarding / Tunneling

SSH Tunnel

Reverse Tunneling

Reverse SSH Tunnel

Adding / Removing Tunnels within an established connection

sshuttle: where transparent proxy meets VPN meets ssh

https://sshuttle.readthedocs.io/en/stable/manpage.html:

sshuttle allows you to create a VPN connection from your machine to any remote server that you can connect to via ssh, as long as that server has a sufficiently new Python installation.

To work, you must have root access on the local machine, but you can have a normal account on the server.

It’s valid to run sshuttle more than once simultaneously on a single client machine, connecting to a different server every time, so you can be on more than one VPN at once.

If run on a router, sshuttle can forward traffic for your entire subnet to the VPN.

SSH and Visual Studio Code

Remote development over SSH
Remote Development using SSH

https://www.maketecheasier.com/kill-unresponsive-ssh-session/

tools.md Surowy