Simple ssh server deployment with persistent root user home directory and persistent ssh host keys
Currently no password auth
kubectl apply -f config.yaml -f deployment.yaml -f pvc.yaml -f service.yaml
--- | |
apiVersion: v1 | |
kind: ConfigMap | |
metadata: | |
name: ssh-config | |
data: | |
sshd_config: |- | |
# $OpenBSD: ssh_config,v 1.34 2019/02/04 02:39:42 dtucker Exp $ | |
# This is the ssh client system-wide configuration file. See | |
# ssh_config(5) for more information. This file provides defaults for | |
# users, and the values can be changed in per-user configuration files | |
# or on the command line. | |
# Configuration data is parsed as follows: | |
# 1. command line options | |
# 2. user-specific file | |
# 3. system-wide file | |
# Any configuration value is only changed the first time it is set. | |
# Thus, host-specific definitions should be at the beginning of the | |
# configuration file, and defaults at the end. | |
# Site-wide defaults for some commonly used options. For a comprehensive | |
# list of available options, their meanings and defaults, please see the | |
# ssh_config(5) man page. | |
# Host * | |
# ForwardAgent no | |
# ForwardX11 no | |
# PasswordAuthentication yes | |
# HostbasedAuthentication no | |
# GSSAPIAuthentication no | |
# GSSAPIDelegateCredentials no | |
# BatchMode no | |
# CheckHostIP yes | |
# AddressFamily any | |
# ConnectTimeout 0 | |
# StrictHostKeyChecking ask | |
# IdentityFile ~/.ssh/id_rsa | |
# IdentityFile ~/.ssh/id_dsa | |
# IdentityFile ~/.ssh/id_ecdsa | |
# IdentityFile ~/.ssh/id_ed25519 | |
# Port 22 | |
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc | |
# MACs hmac-md5,hmac-sha1,[email protected] | |
# EscapeChar ~ | |
# Tunnel no | |
# TunnelDevice any:any | |
# PermitLocalCommand no | |
# VisualHostKey no | |
# ProxyCommand ssh -q -W %h:%p gateway.example.com | |
# RekeyLimit 1G 1h |
--- | |
kind: "Deployment" | |
apiVersion: "apps/v1" | |
metadata: | |
name: sshd | |
namespace: sshd | |
spec: | |
replicas: 1 | |
selector: | |
matchLabels: | |
app: sshd | |
template: | |
metadata: | |
labels: | |
app: sshd | |
spec: | |
containers: | |
- name: sshd | |
image: danielguerra/alpine-sshd:latest | |
tty: true | |
ports: | |
- containerPort: 22 | |
volumeMounts: | |
- mountPath: /root | |
name: home | |
- mountPath: /etc/ssh | |
name: hostkeys | |
- mountPath: /etc/ssh/sshd_config | |
name: ssh-config | |
subPath: sshd_config | |
resources: | |
requests: | |
cpu: "10m" | |
memory: "128Mi" | |
volumes: | |
- name: home | |
persistentVolumeClaim: | |
claimName: home | |
- name: hostkeys | |
persistentVolumeClaim: | |
claimName: hostkeys | |
- name: ssh-config | |
configMap: | |
name: ssh-config |
--- | |
apiVersion: v1 | |
kind: PersistentVolumeClaim | |
metadata: | |
name: hostkeys | |
namespace: sshd | |
spec: | |
storageClassName: freenas-nfs-csi | |
accessModes: | |
- ReadWriteMany | |
resources: | |
requests: | |
storage: 100Mi | |
--- | |
apiVersion: v1 | |
kind: PersistentVolumeClaim | |
metadata: | |
name: home | |
namespace: sshd | |
spec: | |
storageClassName: freenas-nfs-csi | |
accessModes: | |
- ReadWriteMany | |
resources: | |
requests: | |
storage: 1Gi |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: ssh | |
namespace: sshd | |
spec: | |
externalTrafficPolicy: Local | |
loadBalancerIP: 192.168.0.68 | |
ports: | |
- name: ssh | |
port: 22 | |
protocol: TCP | |
targetPort: 22 | |
selector: | |
app: sshd | |
type: LoadBalancer |