mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 11:13:22 +00:00 
			
		
		
		
	Add an sshd container
This is mainly for testing. You can run with something like ``` docker run -v ~/.ssh/id_rsa.pub:/root/.ssh/authorized_keys -p 2222:22 -e TINI_SUBREAPER=1 --pid=host mobylinux/sshd:36c44542d8120e384c724a078e3e489f7a58382c ``` if you want to run in the host pid namespace. You must provide an authorized key, you may provide a host key. Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
		
							
								
								
									
										14
									
								
								base/sshd/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								base/sshd/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| FROM alpine:edge | ||||
|  | ||||
| RUN \ | ||||
|   apk update && apk upgrade && \ | ||||
|   apk add --no-cache \ | ||||
|   openssh-server \ | ||||
|   tini \ | ||||
|   && true | ||||
|  | ||||
| COPY . . | ||||
|  | ||||
| RUN mkdir -p /etc/ssh /root/.ssh && chmod 0700 /root/.ssh | ||||
|  | ||||
| CMD ["/sbin/tini", "/usr/bin/ssh.sh"] | ||||
							
								
								
									
										29
									
								
								base/sshd/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								base/sshd/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| .PHONY: tag push | ||||
|  | ||||
| BASE=alpine:edge | ||||
| IMAGE=sshd | ||||
|  | ||||
| default: push | ||||
|  | ||||
| hash: Dockerfile etc/ssh/sshd_config usr/bin/ssh.sh etc/motd | ||||
| 	DOCKER_CONTENT_TRUST=1 docker pull $(BASE) | ||||
| 	tar cf - $^ | docker build --no-cache -t $(IMAGE):build - | ||||
| 	docker run --rm $(IMAGE):build sh -c "cat $^ /lib/apk/db/installed | sha1sum" | sed 's/ .*//' > $@ | ||||
|  | ||||
| push: hash | ||||
| 	docker pull mobylinux/$(IMAGE):$(shell cat hash) || \ | ||||
| 		(docker tag $(IMAGE):build mobylinux/$(IMAGE):$(shell cat hash) && \ | ||||
| 		 docker push mobylinux/$(IMAGE):$(shell cat hash)) | ||||
| 	docker rmi $(IMAGE):build | ||||
| 	rm -f hash | ||||
|  | ||||
| tag: hash | ||||
| 	docker pull mobylinux/$(IMAGE):$(shell cat hash) || \ | ||||
| 		docker tag $(IMAGE):build mobylinux/$(IMAGE):$(shell cat hash) | ||||
| 	docker rmi $(IMAGE):build | ||||
| 	rm -f hash | ||||
|  | ||||
| clean: | ||||
| 	rm -f hash | ||||
|  | ||||
| .DELETE_ON_ERROR: | ||||
							
								
								
									
										1
									
								
								base/sshd/etc/motd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								base/sshd/etc/motd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| Welcome to Moby  | ||||
							
								
								
									
										144
									
								
								base/sshd/etc/ssh/sshd_config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								base/sshd/etc/ssh/sshd_config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | ||||
| #	$OpenBSD: sshd_config,v 1.98 2016/02/17 05:29:04 djm Exp $ | ||||
|  | ||||
| # This is the sshd server system-wide configuration file.  See | ||||
| # sshd_config(5) for more information. | ||||
|  | ||||
| # This sshd was compiled with PATH=/bin:/usr/bin:/sbin:/usr/sbin | ||||
|  | ||||
| # The strategy used for options in the default sshd_config shipped with | ||||
| # OpenSSH is to specify options with their default value where | ||||
| # possible, but leave them commented.  Uncommented options override the | ||||
| # default value. | ||||
|  | ||||
| #Port 22 | ||||
| #AddressFamily any | ||||
| #ListenAddress 0.0.0.0 | ||||
| #ListenAddress :: | ||||
|  | ||||
| # The default requires explicit activation of protocol 1 | ||||
| #Protocol 2 | ||||
|  | ||||
| # HostKey for protocol version 1 | ||||
| #HostKey /etc/ssh/ssh_host_key | ||||
| # HostKeys for protocol version 2 | ||||
| #HostKey /etc/ssh/ssh_host_rsa_key | ||||
| #HostKey /etc/ssh/ssh_host_dsa_key | ||||
| #HostKey /etc/ssh/ssh_host_ecdsa_key | ||||
| #HostKey /etc/ssh/ssh_host_ed25519_key | ||||
|  | ||||
| # Lifetime and size of ephemeral version 1 server key | ||||
| #KeyRegenerationInterval 1h | ||||
| #ServerKeyBits 1024 | ||||
|  | ||||
| # Ciphers and keying | ||||
| #RekeyLimit default none | ||||
|  | ||||
| # Logging | ||||
| # obsoletes QuietMode and FascistLogging | ||||
| #SyslogFacility AUTH | ||||
| #LogLevel INFO | ||||
|  | ||||
| # Authentication: | ||||
|  | ||||
| #LoginGraceTime 2m | ||||
| #PermitRootLogin prohibit-password | ||||
| #StrictModes yes | ||||
| #MaxAuthTries 6 | ||||
| #MaxSessions 10 | ||||
|  | ||||
| #RSAAuthentication yes | ||||
| #PubkeyAuthentication yes | ||||
|  | ||||
| # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 | ||||
| # but this is overridden so installations will only check .ssh/authorized_keys | ||||
| AuthorizedKeysFile	.ssh/authorized_keys | ||||
|  | ||||
| #AuthorizedPrincipalsFile none | ||||
|  | ||||
| #AuthorizedKeysCommand none | ||||
| #AuthorizedKeysCommandUser nobody | ||||
|  | ||||
| # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts | ||||
| #RhostsRSAAuthentication no | ||||
| # similar for protocol version 2 | ||||
| #HostbasedAuthentication no | ||||
| # Change to yes if you don't trust ~/.ssh/known_hosts for | ||||
| # RhostsRSAAuthentication and HostbasedAuthentication | ||||
| #IgnoreUserKnownHosts no | ||||
| # Don't read the user's ~/.rhosts and ~/.shosts files | ||||
| #IgnoreRhosts yes | ||||
|  | ||||
| # To disable tunneled clear text passwords, change to no here! | ||||
| PasswordAuthentication no | ||||
| #PermitEmptyPasswords no | ||||
|  | ||||
| # Change to no to disable s/key passwords | ||||
| ChallengeResponseAuthentication no | ||||
|  | ||||
| # Kerberos options | ||||
| #KerberosAuthentication no | ||||
| #KerberosOrLocalPasswd yes | ||||
| #KerberosTicketCleanup yes | ||||
| #KerberosGetAFSToken no | ||||
|  | ||||
| # GSSAPI options | ||||
| #GSSAPIAuthentication no | ||||
| #GSSAPICleanupCredentials yes | ||||
|  | ||||
| # Set this to 'yes' to enable PAM authentication, account processing, | ||||
| # and session processing. If this is enabled, PAM authentication will | ||||
| # be allowed through the ChallengeResponseAuthentication and | ||||
| # PasswordAuthentication.  Depending on your PAM configuration, | ||||
| # PAM authentication via ChallengeResponseAuthentication may bypass | ||||
| # the setting of "PermitRootLogin without-password". | ||||
| # If you just want the PAM account and session checks to run without | ||||
| # PAM authentication, then enable this but set PasswordAuthentication | ||||
| # and ChallengeResponseAuthentication to 'no'. | ||||
| #UsePAM no | ||||
|  | ||||
| #AllowAgentForwarding yes | ||||
| #AllowTcpForwarding yes | ||||
| #GatewayPorts no | ||||
| #X11Forwarding no | ||||
| #X11DisplayOffset 10 | ||||
| #X11UseLocalhost yes | ||||
| #PermitTTY yes | ||||
| #PrintMotd yes | ||||
| #PrintLastLog yes | ||||
| #TCPKeepAlive yes | ||||
| #UseLogin no | ||||
| #UsePrivilegeSeparation sandbox | ||||
| #PermitUserEnvironment no | ||||
| #Compression delayed | ||||
| #ClientAliveInterval 0 | ||||
| #ClientAliveCountMax 3 | ||||
| #UseDNS no | ||||
| #PidFile /run/sshd.pid | ||||
| #MaxStartups 10:30:100 | ||||
| #PermitTunnel no | ||||
| #ChrootDirectory none | ||||
| #VersionAddendum none | ||||
|  | ||||
| # no default banner path | ||||
| #Banner none | ||||
|  | ||||
| # Default of no subsystems | ||||
| #Subsystem	sftp	/usr/lib/ssh/sftp-server | ||||
|  | ||||
| # the following are HPN related configuration options | ||||
| # tcp receive buffer polling. disable in non autotuning kernels | ||||
| #TcpRcvBufPoll yes | ||||
|   | ||||
| # disable hpn performance boosts | ||||
| #HPNDisabled no | ||||
|  | ||||
| # buffer size for hpn to non-hpn connections | ||||
| #HPNBufferSize 2048 | ||||
|  | ||||
|  | ||||
| # Example of overriding settings on a per-user basis | ||||
| #Match User anoncvs | ||||
| #	X11Forwarding no | ||||
| #	AllowTcpForwarding no | ||||
| #	PermitTTY no | ||||
| #	ForceCommand cvs server | ||||
							
								
								
									
										6
									
								
								base/sshd/usr/bin/ssh.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								base/sshd/usr/bin/ssh.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| KEYS=$(find /etc/ssh -name 'ssh_host_*_key') | ||||
| [ -z "$KEYS" ] && ssh-keygen -A >/dev/null 2>/dev/null | ||||
|  | ||||
| exec /usr/sbin/sshd -D | ||||
		Reference in New Issue
	
	Block a user