Inject An SSH Server Into Dev Container
DevSpace allows you to start an SSH server in the target container, to easily connect to your development environment. This has the following advantages:
- Since IDE's have a great remote SSH integration you can use that directly for your Kubernetes containers
- Use all SSH features and tools such as scp or terminal with your development container
DevSpace will make sure that ssh is properly configured locally and automatically add an entry to your ~/.ssh/config as well as create an appropriate ssh key pair in ~/.devspace/ssh/id_devspace_rsa to establish a secure connection with the remote container.
You can then connect to the container with ssh <dev-config-name>.<devspace-name>.devspace, where <dev-config-name> denotes the name of the dev config and <devspace-name> the name of the devspace.yaml file.
For example, to start ssh for an ubuntu container:
name: my-devspace-project
deployments:
my-deployment:
helm:
values:
containers:
- image: ubuntu
dev:
my-dev:
imageSelector: ubuntu
ssh: {}
After starting devspace dev, you will be able to connect to the ubuntu container with ssh my-dev.my-devspace-project.devspace.
How does it work?
DevSpace will inject a small helper binary into the running container that contains an SSH server. Then DevSpace will port-forward a random local port to the remote SSH port and configure the local ~/.ssh/config accordingly.
Config Reference
ssh required
SSH allows you to create an SSH tunnel to this container
ssh required enabled required boolean false
Enabled can be used to enable the ssh server within the container. By default,
DevSpace will generate the required keys and create an entry in your ~/.ssh/config
for this container that can be used via ssh dev-config-name.dev-project-name.devspace
enabled required boolean false ssh dev-config-name.dev-project-name.devspacelocalHostname required string
LocalHostname is the local ssh host to write to the ~/.ssh/config
localHostname required string localPort required integer
LocalPort is the local port to forward from, if empty will be random
localPort required integer remoteAddress required string
RemoteAddress is the address to listen to inside the container
remoteAddress required string useInclude required boolean false
UseInclude tells DevSpace to use a the file ~/.ssh/devspace_config for its ssh entries. DevSpace
will also create an import for its own entries inside ~/.ssh/config, this is a cleaner way,
but unfortunately not all SSH clients support this.
useInclude required boolean false 