Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/david-lor/docker-ssh-port-forward-client
Dockerized SSH client to forward a remote port to local host 🐳🔐🔌
https://github.com/david-lor/docker-ssh-port-forward-client
autossh docker port-forwarding ssh ssh-server
Last synced: 2 months ago
JSON representation
Dockerized SSH client to forward a remote port to local host 🐳🔐🔌
- Host: GitHub
- URL: https://github.com/david-lor/docker-ssh-port-forward-client
- Owner: David-Lor
- License: apache-2.0
- Created: 2020-04-08T20:09:44.000Z (over 4 years ago)
- Default Branch: develop
- Last Pushed: 2023-01-03T10:22:52.000Z (almost 2 years ago)
- Last Synced: 2024-10-09T22:29:44.764Z (3 months ago)
- Topics: autossh, docker, port-forwarding, ssh, ssh-server
- Language: Python
- Homepage:
- Size: 38.1 KB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Docker SSH Port Forward Client
[![Docker Hub](https://img.shields.io/badge/%20-DockerHub-blue?logo=docker&style=plastic)](https://hub.docker.com/r/davidlor/ssh-port-forward-client)
![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/davidlor/ssh-port-forward-client?sort=date&style=plastic)Container to connect to a remote SSH server and forward one or more remote TCP ports.
Image based on python:3-slim-buster, using autossh for SSH connection.**This image is experimental and might have undesirable effects. Use it under your responsability!**
## Getting started
*Make sure your SSH server is configured properly to allow TCP port forwarding*
- The following example will forward port `80` from remote host to port `8080` on local container, which is finally exposed.
- The remote host is `192.168.0.100`, with a SSH server available at default port 22 with user `foo`.
- A SSH private key without password protection is required to connect to the remote server with the given user, and is bind mounted on `/ssh_key` path inside the container.```bash
docker run -d --name=ssh_portforward \
-e "MAPPINGS=8080:127.0.0.1:80" \
-e "SSH_HOST=192.168.0.100" \
-e "SSH_USER=foo" -p 8080:8080 \
-v "/home/user/ssh_key:/ssh_key:ro" \
davidlor/ssh-port-forward-client:dev
```Now, port 80 of remote host should be accesible from port 8080 within and without the container.
## Configuration
Currently, the settings are provided through environment variables, which are the following:
### Mappings
**MAPPINGS** is the most important environment variable. Is where we define the relation of local & remote bind hosts & ports to forward to and from.
Each mapping must have at least 1 argument and at most 4 arguments, split by `:`. The arguments are: `LOCAL_HOST:LOCAL_PORT:REMOTE_HOST:REMOTE_PORT`, being:
- `REMOTE_PORT`: port on remote machine to forward through SSH (the only argument required)
- `REMOTE_HOST`: host on remote network to forward the `REMOTE_PORT` from (default: `127.0.0.1` - the SSH server itself, but could be any accessible port from other host from the same network as the SSH server)
- `LOCAL_PORT`: the remote port will be exposed on this port on the local host -container- (default: the same as `REMOTE_PORT`)
- `LOCAL_HOST`: where to bind the `LOCAL_PORT` - this can be used to limit access to the port (default: `0.0.0.0` - any host, and since this will be running on a container, it can be limited using Docker port mapping)Mapping examples:
- `80`: forward port 80 from remote host (where SSH server is running) to port 80 of local container
- `192.168.0.200:80`: forward port 80 from the host 192.168.0.200 (visible by the SSH server) to port 80 of local container
- `8080:127.0.0.1:80`: forward port 80 from remote host (where SSH server is running) to port 8080 of local container
- `127.0.0.1:80:127.0.0.1:80`: forward port 80 from remote host (where SSH server is running) to port 80 of local container, and only accesible by the container itself (or by the host, if network=host)Multiple mappings can be defined by:
- Using a single `MAPPINGS` env var, and splitting them by `;` (when running docker run, the value must be passed between quotes, like `-e MAPPINGS="8080:127.0.0.1:80; 4443:127.0.0.1:443"`). Spaces are ignored.
- Using multiple environment variables, starting with `MAPPING`. For example, they could be named like "MAPPING1", "MAPPING_1", "MAPPING_SSH", and so on. Inside each env var, one or many mappings can be defined. All of them will be merged and used.#### Reverse port forwarding
Any mapping that starts with a `R` is considered a reverse port forward. This allows to map a port on the client network to the remote server network.
By defining the following setting: `-e MAPPINGS="R8080:127.0.0.1:80"`, the port 80 on the client host will be accessible on the port 8080 on the remote SSH server host.
Notice that you might have to set container network to `host` in order to forward host ports.Reverse and non-reverse mappings can be combined on the same connection, thus, the same container.
### SSH server settings
- `SSH_HOST`: remote host/IP to connect to (required)
- `SSH_PORT`: SSH port on the remote host (default: `22`)
- `SSH_USER`: user to connect with on the remote SSH server (required)### Other settings
- `SSH_COMPRESSION`: set to 1 to enable SSH Compression (default: `0`)
- `SSH_IPV6`: set to `1` to connect using IPv6 (default: `0` - use IPv4)
- `SSH_KEY_LOCATION`: where to read SSH key from, inside container (default: `/ssh_key`)
- `SSH_KEY_WRITE_LOCATION`: the SSH key read from `SSH_KEY_LOCATION` is copied to this path, to ensure the file permissions are correct
- You can define [autossh Environment settings](https://linux.die.net/man/1/autossh) on the container and they will be used (example: `AUTOSSH_DEBUG` set to `1` to enable verbose debug output for autossh)## TODO
- Allow SSH keys with password
- Allow login with password only (no key)
- Define mappings & settings through file
- Update mappings in real time, avoiding downtime
- Allow proxy tunnel
- Allow to set autossh reconnection settings
- Allow to set custom SSH options (for unsupported settings)
- Allow to provide SSH server public key for host verification
- Add healthcheck based on forwarded ports
- Add automated tests
- Add sshd_config server settings examples