gh codespace ssh
gh codespace ssh [<flags>...] [-- <ssh-flags>...] [<command>]
The ssh
command is used to SSH into a codespace. In its simplest form, you can
run gh cs ssh
, select a codespace interactively, and connect.
The ssh
command will automatically create a public/private ssh key pair in the
~/.ssh
directory if you do not have an existing valid key pair. When selecting the
key pair to use, the preferred order is:
- Key specified by
-i
in<ssh-flags>
- Automatic key, if it already exists
- First valid key pair in ssh config (according to
ssh -G
) - Automatic key, newly created
The ssh
command also supports deeper integration with OpenSSH using a --config
option that generates per-codespace ssh configuration in OpenSSH format.
Including this configuration in your ~/.ssh/config
improves the user experience
of tools that integrate with OpenSSH, such as Bash/Zsh completion of ssh hostnames,
remote path completion for scp/rsync/sshfs
, git
ssh remotes, and so on.
Once that is set up (see the second example below), you can ssh to codespaces as
if they were ordinary remote hosts (using ssh
, not gh cs ssh
).
Note that the codespace you are connecting to must have an SSH server pre-installed.
If the docker image being used for the codespace does not have an SSH server,
install it in your Dockerfile
or, for codespaces that use Debian-based images,
you can add the following to your devcontainer.json
:
"features": {
"ghcr.io/devcontainers/features/sshd:1": {
"version": "latest"
}
}
Options
-c
,--codespace <string>
- Name of the codespace
-
--config
- Write OpenSSH configuration to stdout
-d
,--debug
- Log debug data to a file
-
--debug-file <string>
- Path of the file log to
-
--profile <string>
- Name of the SSH profile to use
-R
,--repo <string>
- Filter codespace selection by repository name (user/repo)
-
--repo-owner <string>
- Filter codespace selection by repository owner (username or org)
-
--server-port <int> (default 0)
- SSH server port number (0 => pick unused)