GitHub CLI (original) (raw)
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)
Examples
$ gh codespace ssh
$ gh codespace ssh --config > ~/.ssh/codespaces
$ printf 'Match all\nInclude ~/.ssh/codespaces\n' >> ~/.ssh/config