Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

configurable bind mount, for docker-compose support #8

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,34 @@ To fetch the latest image, do:
pinata-ssh-pull
```

## Using with docker-compose

To use with docker-compose, you can change the ssh-agent volume type to a host directory
rather than a docker volume, which can then be mounted in docker-compose.yml. To do this,
create a `.pinata-ssh.env` file in your home directory and set the `VOLUME_TYPE` to "bind":
```
echo 'VOLUME_TYPE=bind' > ~/.pinata-ssh.env
```

This will cause the ssh-agent file to be written to `$HOME/.pinata-ssh-agent`, which
you can reference in your docker-compose.yml:

```
# docker-compose.yml
services:
...
volumes:
- type: bind
source: ${HOME}/.pinata-ssh-agent
target: /ssh-agent
environment:
- SSH_AUTH_SOCK=/ssh-agent/ssh-agent.sock
...
```

The host mount path can also be changed by setting a `HOST_VOLUME_PATH` in the
.pinata-ssh.env file.

## Troubleshooting

If pinata-ssh-forward fails to run, run `ssh-add -l`. If there are no identities, then run `ssh-add`.
Expand Down
18 changes: 16 additions & 2 deletions pinata-ssh-forward.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,35 @@ set -eo pipefail

IMAGE_NAME=uber/ssh-agent-forward:latest
CONTAINER_NAME=pinata-sshd
VOLUME_TYPE=volume # volume, bind
VOLUME_NAME=ssh-agent
HOST_VOLUME_PATH=${HOME}/.pinata-ssh-agent
HOST_PORT=2244
AUTHORIZED_KEYS=$(ssh-add -L | base64 | tr -d '\n')
KNOWN_HOSTS_FILE=$(mktemp -t dsaf.XXX)

if [ -e $HOME/.pinata-ssh.env ]; then
. $HOME/.pinata-ssh.env
fi

trap 'rm ${KNOWN_HOSTS_FILE}' EXIT

docker rm -f "${CONTAINER_NAME}" >/dev/null 2>&1 || true

docker volume create --name "${VOLUME_NAME}"
if [ ${VOLUME_TYPE} == "volume" ]; then
docker volume create --name "${VOLUME_NAME}"
VOLUME_MOUNT=$VOLUME_NAME
elif [ ${VOLUME_TYPE} == "bind" ]; then
VOLUME_MOUNT=$HOST_VOLUME_PATH
else
echo "Unsupported volume type: $VOLUME_TYPE"
exit 1
fi

docker run \
--name "${CONTAINER_NAME}" \
-e AUTHORIZED_KEYS="${AUTHORIZED_KEYS}" \
-v ${VOLUME_NAME}:/ssh-agent \
-v "${VOLUME_MOUNT}:/ssh-agent" \
-d \
-p "${HOST_PORT}:22" \
"${IMAGE_NAME}" >/dev/null \
Expand Down
19 changes: 18 additions & 1 deletion pinata-ssh-mount.sh
Original file line number Diff line number Diff line change
@@ -1,2 +1,19 @@
#!/usr/bin/env bash
echo "-v ssh-agent:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent/ssh-agent.sock"
VOLUME_TYPE=volume # volume, bind
VOLUME_NAME=ssh-agent
HOST_VOLUME_PATH=${HOME}/.pinata-ssh-agent

if [ -e $HOME/.pinata-ssh.env ]; then
. $HOME/.pinata-ssh.env
fi

if [ ${VOLUME_TYPE} == "volume" ]; then
VOLUME_MOUNT=$VOLUME_NAME
elif [ ${VOLUME_TYPE} == "bind" ]; then
VOLUME_MOUNT=$HOST_VOLUME_PATH
else
echo "Unsupported volume type: ${VOLUME_TYPE}"
exit 1
fi

echo "-v ${VOLUME_MOUNT}:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent/ssh-agent.sock"