【Docker】devcontainer コンテナ内部からremote push pullしたい

### 一言まとめ
ssh-agentで秘密鍵を登録し、github.comの認証

####  ~/.ssh/config に以下を追加する
```~/.ssh/config
Host github
  HostName github.com
  User git
  ForwardAgent yes
```

#### ssh-agent に秘密鍵を登録
```
ssh-add -K ~/.ssh/id_rsa
```

#### 接続確認

```
$ ssh -T github
Hi ｛username｝! You've successfully authenticated, but GitHub does not provide shell access.
```


これでdevcontainer内からもGit Push,Pull が可能。

```.devcontainer/devcontainer.json
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.224.3/containers/python-3
{
	"name": "Python 3",
	"build": {
		"dockerfile": "Dockerfile",
		"context": "..",
		"args": {
			// Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6
			// Append -bullseye or -buster to pin to an OS version.
			// Use -bullseye variants on local on arm64/Apple Silicon.
			"VARIANT": "3.10-bullseye",
			// Options
			"NODE_VERSION": "lts/*"
		}
	},
	// Set *default* container specific settings.json values on container create.
	"settings": {
		"python.defaultInterpreterPath": "/usr/local/bin/python",
		"python.linting.enabled": true,
		"python.linting.pylintEnabled": true,
		"python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
		"python.formatting.blackPath": "/usr/local/py-utils/bin/black",
		"python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf",
		"python.linting.banditPath": "/usr/local/py-utils/bin/bandit",
		"python.linting.flake8Path": "/usr/local/py-utils/bin/flake8",
		"python.linting.mypyPath": "/usr/local/py-utils/bin/mypy",
		"python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle",
		"python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle",
		"python.linting.pylintPath": "/usr/local/py-utils/bin/pylint",
		"python.formatting.provider": "black"
	},
	// Add the IDs of extensions you want installed when the container is created.
	"extensions": [
		"ms-python.python",
		"ms-python.vscode-pylance"
	],
	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [],
	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": "pip3 install --user -r requirements.txt",
	// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
	"remoteUser": "vscode",
	"features": {
		"docker-in-docker": "latest",
		"docker-from-docker": "latest",
		"terraform": "1.0",
		"git": "latest",
		"git-lfs": "latest",
		"github-cli": "latest",
		"sshd": "latest"
	}
}

```


```.devcontainer/Dockerfile
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.224.3/containers/python-3/.devcontainer/base.Dockerfile

# [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster
ARG VARIANT="3.10-bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}

# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
ARG NODE_VERSION="none"
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi

# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image.
COPY requirements.txt /tmp/pip-tmp/
RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
   && rm -rf /tmp/pip-tmp

# Install dependencies and tools
RUN apt-get update -yqq && \
   apt-get upgrade -yqq && \
   apt-get install -yqq --no-install-recommends \ 
   wget \
   libczmq-dev \
   curl \
   libssl-dev \
   git \
   inetutils-telnet \
   bind9utils freetds-dev \
   libkrb5-dev \
   libsasl2-dev \
   libffi-dev libpq-dev \
   freetds-bin build-essential \
   default-libmysqlclient-dev \
   apt-utils \
   rsync \
   zip \
   unzip \
   gcc \
   vim \
   locales \
   && apt-get clean

COPY ./constraints-3.8.txt /constraints-3.8.txt

# Upgrade pip
# Create airflow user 
# Install apache airflow with subpackages
RUN pip install --upgrade pip && \
   useradd -ms /bin/bash -d ${AIRFLOW_HOME} airflow && \
   pip install apache-airflow[postgres]==${AIRFLOW_VERSION} --constraint /constraints-3.8.txt

```


参考: [link](https://github.com/microsoft/vscode-remote-try-python)