mirror of
https://github.com/atmoz/sftp.git
synced 2024-11-24 12:59:24 -05:00
Enable authorized keys in /etc/ssh/authorized_keys
This commit is contained in:
parent
eacf693131
commit
b6ec0b969c
5 changed files with 47 additions and 12 deletions
|
@ -9,7 +9,8 @@ RUN apt-get update && \
|
||||||
apt-get -y install openssh-server && \
|
apt-get -y install openssh-server && \
|
||||||
rm -rf /var/lib/apt/lists/* && \
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
mkdir -p /var/run/sshd && \
|
mkdir -p /var/run/sshd && \
|
||||||
rm -f /etc/ssh/ssh_host_*key*
|
rm -f /etc/ssh/ssh_host_*key* && \
|
||||||
|
mkdir -p /etc/sshd_authorized_keys
|
||||||
|
|
||||||
COPY files/sshd_config /etc/ssh/sshd_config
|
COPY files/sshd_config /etc/ssh/sshd_config
|
||||||
COPY files/create-sftp-user /usr/local/bin/
|
COPY files/create-sftp-user /usr/local/bin/
|
||||||
|
|
|
@ -9,7 +9,8 @@ RUN echo "@community http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /et
|
||||||
apk add --no-cache bash shadow@community openssh-server-pam openssh-sftp-server && \
|
apk add --no-cache bash shadow@community openssh-server-pam openssh-sftp-server && \
|
||||||
ln -s /usr/sbin/sshd.pam /usr/sbin/sshd && \
|
ln -s /usr/sbin/sshd.pam /usr/sbin/sshd && \
|
||||||
mkdir -p /var/run/sshd && \
|
mkdir -p /var/run/sshd && \
|
||||||
rm -f /etc/ssh/ssh_host_*key*
|
rm -f /etc/ssh/ssh_host_*key* && \
|
||||||
|
mkdir -p /etc/sshd_authorized_keys
|
||||||
|
|
||||||
COPY files/sshd_config /etc/ssh/sshd_config
|
COPY files/sshd_config /etc/ssh/sshd_config
|
||||||
COPY files/create-sftp-user /usr/local/bin/
|
COPY files/create-sftp-user /usr/local/bin/
|
||||||
|
|
30
README.md
30
README.md
|
@ -99,7 +99,7 @@ docker run \
|
||||||
Tip: you can use this Python code to generate encrypted passwords:
|
Tip: you can use this Python code to generate encrypted passwords:
|
||||||
`docker run --rm python:alpine python -c "import crypt; print(crypt.crypt('YOUR_PASSWORD'))"`
|
`docker run --rm python:alpine python -c "import crypt; print(crypt.crypt('YOUR_PASSWORD'))"`
|
||||||
|
|
||||||
## Logging in with SSH keys
|
## Logging in with SSH keys in ~/.ssh/authorized_keys
|
||||||
|
|
||||||
Mount public keys in the user's `.ssh/keys/` directory. All keys are automatically appended to `.ssh/authorized_keys` (you can't mount this file directly, because OpenSSH requires limited file permissions). In this example, we do not provide any password, so the user `foo` can only login with his SSH key.
|
Mount public keys in the user's `.ssh/keys/` directory. All keys are automatically appended to `.ssh/authorized_keys` (you can't mount this file directly, because OpenSSH requires limited file permissions). In this example, we do not provide any password, so the user `foo` can only login with his SSH key.
|
||||||
|
|
||||||
|
@ -112,6 +112,34 @@ docker run \
|
||||||
foo::1001
|
foo::1001
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Logging in with SSH keys in /etc/ssh/authorized_keys/%u/authorized_keys
|
||||||
|
|
||||||
|
If you can't or wouldn't want to put the keys into the user's `.ssh` directory, you can as well put them into a
|
||||||
|
directory under `/etc/ssh`.
|
||||||
|
|
||||||
|
Put the public keys in a `keys` directory. All keys are automatically appended to `/etc/ssh/authorized_keys/USERNAME/authorized_keys` (you can't mount this file directly, because OpenSSH requires limited file permissions).
|
||||||
|
|
||||||
|
```text
|
||||||
|
keys
|
||||||
|
|-- user1
|
||||||
|
| `--- id_rs.pub
|
||||||
|
|-- user2
|
||||||
|
| `--- id_rs.pub
|
||||||
|
:
|
||||||
|
`-- userN
|
||||||
|
`--- id_rs.pub
|
||||||
|
```
|
||||||
|
|
||||||
|
Mount this directory ass `/etc/ssh/keys`
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run \
|
||||||
|
-v <host-dir>/keys:/etc/ssh/keys:ro \
|
||||||
|
-v <host-dir>/share:/home/foo/share \
|
||||||
|
-p 2222:22 -d atmoz/sftp \
|
||||||
|
foo::1001
|
||||||
|
```
|
||||||
|
|
||||||
## Providing your own SSH host key (recommended)
|
## Providing your own SSH host key (recommended)
|
||||||
|
|
||||||
This container will generate new SSH host keys at first run. To avoid that your users get a MITM warning when you recreate your container (and the host keys changes), you can mount your own host keys.
|
This container will generate new SSH host keys at first run. To avoid that your users get a MITM warning when you recreate your container (and the host keys changes), you can mount your own host keys.
|
||||||
|
|
|
@ -83,18 +83,21 @@ fi
|
||||||
# Add SSH keys to authorized_keys with valid permissions
|
# Add SSH keys to authorized_keys with valid permissions
|
||||||
userKeysQueuedDir="/home/$user/.ssh/keys"
|
userKeysQueuedDir="/home/$user/.ssh/keys"
|
||||||
if [ -d "$userKeysQueuedDir" ]; then
|
if [ -d "$userKeysQueuedDir" ]; then
|
||||||
userKeysAllowedFileTmp="$(mktemp)"
|
|
||||||
userKeysAllowedFile="/home/$user/.ssh/authorized_keys"
|
userKeysAllowedFile="/home/$user/.ssh/authorized_keys"
|
||||||
|
else
|
||||||
for publickey in "$userKeysQueuedDir"/*; do
|
userKeysQueuedDir="/etc/ssh/keys/$user"
|
||||||
cat "$publickey" >> "$userKeysAllowedFileTmp"
|
if [ -d "$userKeysQueuedDir" ]; then
|
||||||
done
|
userKeysAllowedFile="/etc/ssh/authorized_keys/$user/authorized_keys"
|
||||||
|
mkdir -p "/etc/ssh/authorized_keys/$user"
|
||||||
# Remove duplicate keys
|
chmod 0700 "/etc/ssh/authorized_keys/$user"
|
||||||
sort < "$userKeysAllowedFileTmp" | uniq > "$userKeysAllowedFile"
|
chown "$uid:root" "/etc/ssh/authorized_keys/$user"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ -n "$userKeysAllowedFile" ]; then
|
||||||
|
sort -u "$userKeysQueuedDir"/* > "$userKeysAllowedFile"
|
||||||
|
|
||||||
chown "$uid" "$userKeysAllowedFile"
|
chown "$uid" "$userKeysAllowedFile"
|
||||||
chmod 600 "$userKeysAllowedFile"
|
chmod 0600 "$userKeysAllowedFile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Make sure dirs exists
|
# Make sure dirs exists
|
||||||
|
|
|
@ -18,5 +18,7 @@ Subsystem sftp internal-sftp
|
||||||
ForceCommand internal-sftp
|
ForceCommand internal-sftp
|
||||||
ChrootDirectory %h
|
ChrootDirectory %h
|
||||||
|
|
||||||
|
AuthorizedKeysFile %h/.ssh/authorized_keys /etc/ssh/authorized_keys/%u/authorized_keys
|
||||||
|
|
||||||
# Enable this for more logs
|
# Enable this for more logs
|
||||||
#LogLevel VERBOSE
|
#LogLevel VERBOSE
|
||||||
|
|
Loading…
Reference in a new issue