From 04156f86c9c09be3275c11729c192f914f97195b Mon Sep 17 00:00:00 2001 From: blimp Date: Wed, 23 Oct 2019 12:17:18 -0700 Subject: [PATCH] blimp --- 1.0/Dockerfile | 16 ++++++++-- 1.0/init_container.sh | 5 +++ 1.1/Dockerfile | 16 ++++++++-- 1.1/init_container.sh | 5 +++ 2.0/Dockerfile | 16 ++++++++-- 2.0/init_container.sh | 5 +++ 2.0/src/hostingstart.csproj | 2 +- 2.1/Dockerfile | 16 ++++++++-- 2.1/init_container.sh | 5 +++ 2.1/src/hostingstart.csproj | 2 +- 2.2/Dockerfile | 16 ++++++++-- 2.2/init_container.sh | 5 +++ 3.0/Dockerfile | 62 ++++++++++++++++++++++++++++++++++++ 3.0/bin.zip | Bin 0 -> 51288 bytes 3.0/build.sh | 7 ++++ 3.0/hostingstart.html | 51 +++++++++++++++++++++++++++++ 3.0/init_container.sh | 53 ++++++++++++++++++++++++++++++ 3.0/src/.gitignore | 38 ++++++++++++++++++++++ 3.0/src/Program.cs | 19 +++++++++++ 3.0/src/Startup.cs | 21 ++++++++++++ 3.0/src/hostingstart.csproj | 15 +++++++++ 3.0/ssh_setup.sh | 26 +++++++++++++++ 3.0/sshd_config | 16 ++++++++++ 23 files changed, 405 insertions(+), 12 deletions(-) create mode 100644 3.0/Dockerfile create mode 100644 3.0/bin.zip create mode 100644 3.0/build.sh create mode 100644 3.0/hostingstart.html create mode 100644 3.0/init_container.sh create mode 100644 3.0/src/.gitignore create mode 100644 3.0/src/Program.cs create mode 100644 3.0/src/Startup.cs create mode 100644 3.0/src/hostingstart.csproj create mode 100644 3.0/ssh_setup.sh create mode 100644 3.0/sshd_config diff --git a/1.0/Dockerfile b/1.0/Dockerfile index 8f5c9b9..de97828 100644 --- a/1.0/Dockerfile +++ b/1.0/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/oryx/dotnetcore:1.0-20190730.1 +FROM mcr.microsoft.com/oryx/dotnetcore:1.0-20191018.1 LABEL maintainer="Azure App Services Container Images " RUN apt-get update \ @@ -10,12 +10,16 @@ RUN apt-get update \ curl \ wget \ tcptraceroute \ + net-tools \ + dnsutils \ + tcpdump \ + iproute2 \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /defaulthome/hostingstart \ && mkdir -p /home/LogFiles/ \ && echo "root:Docker!" | chpasswd \ - && echo "cd /home" >> /etc/bash.bashrc + && echo "cd /home" >> /root/.bashrc COPY bin.zip /tmp RUN unzip -q -o /tmp/bin.zip -d /defaulthome/hostingstart \ @@ -45,6 +49,14 @@ ENV PATH ${PATH}:/home/site/wwwroot ENV ASPNETCORE_URLS= ENV ASPNETCORE_FORWARDEDHEADERS_ENABLED=true +# Enable automatic creation of dumps when a process crashes +ENV COMPlus_DbgEnableMiniDump="1" +# Create a base directory for dumps under /home so that the +# dumps are accessible from the build container too (since a runtime container might have already crashed) +ENV DUMP_DIR="/home/logs/dumps" +RUN mkdir -p "$DUMP_DIR" +RUN chmod 777 "$DUMP_DIR" + WORKDIR /home/site/wwwroot ENTRYPOINT ["/bin/init_container.sh"] diff --git a/1.0/init_container.sh b/1.0/init_container.sh index dc7f093..e394ed4 100644 --- a/1.0/init_container.sh +++ b/1.0/init_container.sh @@ -22,6 +22,11 @@ eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/ sed -i "s/SSH_PORT/$SSH_PORT/g" /etc/ssh/sshd_config /usr/sbin/sshd +# Format : coredump.hostname.processid.time +# Example: coredump.7d77b4ff1fea.15.1571222166 +containerName=`hostname` +export COMPlus_DbgMiniDumpName="$DUMP_DIR/coredump.$containerName.%d.$(date +%s)" + appPath="/home/site/wwwroot" runFromPath="/tmp/webapp" startupCommandPath="/opt/startup/startup.sh" diff --git a/1.1/Dockerfile b/1.1/Dockerfile index 0ec5d6d..e58f5f2 100644 --- a/1.1/Dockerfile +++ b/1.1/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/oryx/dotnetcore:1.1-20190730.1 +FROM mcr.microsoft.com/oryx/dotnetcore:1.1-20191018.1 LABEL maintainer="Azure App Services Container Images " RUN apt-get update \ @@ -10,12 +10,16 @@ RUN apt-get update \ curl \ wget \ tcptraceroute \ + net-tools \ + dnsutils \ + tcpdump \ + iproute2 \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /defaulthome/hostingstart \ && mkdir -p /home/LogFiles/ \ && echo "root:Docker!" | chpasswd \ - && echo "cd /home" >> /etc/bash.bashrc + && echo "cd /home" >> /root/.bashrc COPY bin.zip /tmp RUN unzip -q -o /tmp/bin.zip -d /defaulthome/hostingstart \ @@ -45,6 +49,14 @@ ENV PATH ${PATH}:/home/site/wwwroot ENV ASPNETCORE_URLS= ENV ASPNETCORE_FORWARDEDHEADERS_ENABLED=true +# Enable automatic creation of dumps when a process crashes +ENV COMPlus_DbgEnableMiniDump="1" +# Create a base directory for dumps under /home so that the +# dumps are accessible from the build container too (since a runtime container might have already crashed) +ENV DUMP_DIR="/home/logs/dumps" +RUN mkdir -p "$DUMP_DIR" +RUN chmod 777 "$DUMP_DIR" + WORKDIR /home/site/wwwroot ENTRYPOINT ["/bin/init_container.sh"] diff --git a/1.1/init_container.sh b/1.1/init_container.sh index dc7f093..e394ed4 100644 --- a/1.1/init_container.sh +++ b/1.1/init_container.sh @@ -22,6 +22,11 @@ eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/ sed -i "s/SSH_PORT/$SSH_PORT/g" /etc/ssh/sshd_config /usr/sbin/sshd +# Format : coredump.hostname.processid.time +# Example: coredump.7d77b4ff1fea.15.1571222166 +containerName=`hostname` +export COMPlus_DbgMiniDumpName="$DUMP_DIR/coredump.$containerName.%d.$(date +%s)" + appPath="/home/site/wwwroot" runFromPath="/tmp/webapp" startupCommandPath="/opt/startup/startup.sh" diff --git a/2.0/Dockerfile b/2.0/Dockerfile index 2036033..bb16ed3 100644 --- a/2.0/Dockerfile +++ b/2.0/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/oryx/dotnetcore:2.0-20190730.1 +FROM mcr.microsoft.com/oryx/dotnetcore:2.0-20191018.1 LABEL maintainer="Azure App Services Container Images " RUN apt-get update \ @@ -10,12 +10,16 @@ RUN apt-get update \ curl \ wget \ tcptraceroute \ + net-tools \ + dnsutils \ + tcpdump \ + iproute2 \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /defaulthome/hostingstart \ && mkdir -p /home/LogFiles/ \ && echo "root:Docker!" | chpasswd \ - && echo "cd /home" >> /etc/bash.bashrc + && echo "cd /home" >> /root/.bashrc COPY bin.zip /tmp RUN unzip -q -o /tmp/bin.zip -d /defaulthome/hostingstart \ @@ -45,6 +49,14 @@ ENV PATH ${PATH}:/home/site/wwwroot ENV ASPNETCORE_URLS= ENV ASPNETCORE_FORWARDEDHEADERS_ENABLED=true +# Enable automatic creation of dumps when a process crashes +ENV COMPlus_DbgEnableMiniDump="1" +# Create a base directory for dumps under /home so that the +# dumps are accessible from the build container too (since a runtime container might have already crashed) +ENV DUMP_DIR="/home/logs/dumps" +RUN mkdir -p "$DUMP_DIR" +RUN chmod 777 "$DUMP_DIR" + WORKDIR /home/site/wwwroot ENTRYPOINT ["/bin/init_container.sh"] diff --git a/2.0/init_container.sh b/2.0/init_container.sh index dc7f093..e394ed4 100644 --- a/2.0/init_container.sh +++ b/2.0/init_container.sh @@ -22,6 +22,11 @@ eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/ sed -i "s/SSH_PORT/$SSH_PORT/g" /etc/ssh/sshd_config /usr/sbin/sshd +# Format : coredump.hostname.processid.time +# Example: coredump.7d77b4ff1fea.15.1571222166 +containerName=`hostname` +export COMPlus_DbgMiniDumpName="$DUMP_DIR/coredump.$containerName.%d.$(date +%s)" + appPath="/home/site/wwwroot" runFromPath="/tmp/webapp" startupCommandPath="/opt/startup/startup.sh" diff --git a/2.0/src/hostingstart.csproj b/2.0/src/hostingstart.csproj index abda657..4c4f12a 100644 --- a/2.0/src/hostingstart.csproj +++ b/2.0/src/hostingstart.csproj @@ -9,7 +9,7 @@ - + diff --git a/2.1/Dockerfile b/2.1/Dockerfile index cbaebe3..a54477b 100644 --- a/2.1/Dockerfile +++ b/2.1/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/oryx/dotnetcore:2.1-20190730.1 +FROM mcr.microsoft.com/oryx/dotnetcore:2.1-20191018.1 LABEL maintainer="Azure App Services Container Images " RUN apt-get update \ @@ -10,12 +10,16 @@ RUN apt-get update \ curl \ wget \ tcptraceroute \ + net-tools \ + dnsutils \ + tcpdump \ + iproute2 \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /defaulthome/hostingstart \ && mkdir -p /home/LogFiles/ \ && echo "root:Docker!" | chpasswd \ - && echo "cd /home" >> /etc/bash.bashrc + && echo "cd /home" >> /root/.bashrc COPY bin.zip /tmp RUN unzip -q -o /tmp/bin.zip -d /defaulthome/hostingstart \ @@ -45,6 +49,14 @@ ENV PATH ${PATH}:/home/site/wwwroot ENV ASPNETCORE_URLS= ENV ASPNETCORE_FORWARDEDHEADERS_ENABLED=true +# Enable automatic creation of dumps when a process crashes +ENV COMPlus_DbgEnableMiniDump="1" +# Create a base directory for dumps under /home so that the +# dumps are accessible from the build container too (since a runtime container might have already crashed) +ENV DUMP_DIR="/home/logs/dumps" +RUN mkdir -p "$DUMP_DIR" +RUN chmod 777 "$DUMP_DIR" + WORKDIR /home/site/wwwroot ENTRYPOINT ["/bin/init_container.sh"] diff --git a/2.1/init_container.sh b/2.1/init_container.sh index dc7f093..e394ed4 100644 --- a/2.1/init_container.sh +++ b/2.1/init_container.sh @@ -22,6 +22,11 @@ eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/ sed -i "s/SSH_PORT/$SSH_PORT/g" /etc/ssh/sshd_config /usr/sbin/sshd +# Format : coredump.hostname.processid.time +# Example: coredump.7d77b4ff1fea.15.1571222166 +containerName=`hostname` +export COMPlus_DbgMiniDumpName="$DUMP_DIR/coredump.$containerName.%d.$(date +%s)" + appPath="/home/site/wwwroot" runFromPath="/tmp/webapp" startupCommandPath="/opt/startup/startup.sh" diff --git a/2.1/src/hostingstart.csproj b/2.1/src/hostingstart.csproj index f09851a..191d3bb 100644 --- a/2.1/src/hostingstart.csproj +++ b/2.1/src/hostingstart.csproj @@ -9,7 +9,7 @@ - + diff --git a/2.2/Dockerfile b/2.2/Dockerfile index 353867f..580ad59 100644 --- a/2.2/Dockerfile +++ b/2.2/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/oryx/dotnetcore:2.2-20190730.1 +FROM mcr.microsoft.com/oryx/dotnetcore:2.2-20191018.1 LABEL maintainer="Azure App Services Container Images " RUN apt-get update \ @@ -10,12 +10,16 @@ RUN apt-get update \ curl \ wget \ tcptraceroute \ + net-tools \ + dnsutils \ + tcpdump \ + iproute2 \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /defaulthome/hostingstart \ && mkdir -p /home/LogFiles/ \ && echo "root:Docker!" | chpasswd \ - && echo "cd /home" >> /etc/bash.bashrc + && echo "cd /home" >> /root/.bashrc COPY bin.zip /tmp RUN unzip -q -o /tmp/bin.zip -d /defaulthome/hostingstart \ @@ -45,6 +49,14 @@ ENV PATH ${PATH}:/home/site/wwwroot ENV ASPNETCORE_URLS= ENV ASPNETCORE_FORWARDEDHEADERS_ENABLED=true +# Enable automatic creation of dumps when a process crashes +ENV COMPlus_DbgEnableMiniDump="1" +# Create a base directory for dumps under /home so that the +# dumps are accessible from the build container too (since a runtime container might have already crashed) +ENV DUMP_DIR="/home/logs/dumps" +RUN mkdir -p "$DUMP_DIR" +RUN chmod 777 "$DUMP_DIR" + WORKDIR /home/site/wwwroot ENTRYPOINT ["/bin/init_container.sh"] diff --git a/2.2/init_container.sh b/2.2/init_container.sh index dc7f093..e394ed4 100644 --- a/2.2/init_container.sh +++ b/2.2/init_container.sh @@ -22,6 +22,11 @@ eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/ sed -i "s/SSH_PORT/$SSH_PORT/g" /etc/ssh/sshd_config /usr/sbin/sshd +# Format : coredump.hostname.processid.time +# Example: coredump.7d77b4ff1fea.15.1571222166 +containerName=`hostname` +export COMPlus_DbgMiniDumpName="$DUMP_DIR/coredump.$containerName.%d.$(date +%s)" + appPath="/home/site/wwwroot" runFromPath="/tmp/webapp" startupCommandPath="/opt/startup/startup.sh" diff --git a/3.0/Dockerfile b/3.0/Dockerfile new file mode 100644 index 0000000..6ee1182 --- /dev/null +++ b/3.0/Dockerfile @@ -0,0 +1,62 @@ +FROM mcr.microsoft.com/oryx/dotnetcore:3.0-20191018.1 +LABEL maintainer="Azure App Services Container Images " + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + apt-utils \ + unzip \ + openssh-server \ + vim \ + curl \ + wget \ + tcptraceroute \ + net-tools \ + dnsutils \ + tcpdump \ + iproute2 \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /defaulthome/hostingstart \ + && mkdir -p /home/LogFiles/ \ + && echo "root:Docker!" | chpasswd \ + && echo "cd /home" >> /root/.bashrc + +COPY bin.zip /tmp +RUN unzip -q -o /tmp/bin.zip -d /defaulthome/hostingstart \ + && rm /tmp/bin.zip + +COPY init_container.sh /bin/ +RUN chmod 755 /bin/init_container.sh + +COPY hostingstart.html /defaulthome/hostingstart/wwwroot/ + +# configure startup +COPY sshd_config /etc/ssh/ +COPY ssh_setup.sh /tmp +RUN mkdir -p /opt/startup \ + && chmod -R +x /opt/startup \ + && chmod -R +x /tmp/ssh_setup.sh \ + && (sleep 1;/tmp/ssh_setup.sh 2>&1 > /dev/null) \ + && rm -rf /tmp/* + +ENV PORT 8080 +ENV SSH_PORT 2222 +EXPOSE 8080 2222 + +ENV WEBSITE_ROLE_INSTANCE_ID localRoleInstance +ENV WEBSITE_INSTANCE_ID localInstance +ENV PATH ${PATH}:/home/site/wwwroot +ENV ASPNETCORE_URLS= +ENV ASPNETCORE_FORWARDEDHEADERS_ENABLED=true + +# Enable automatic creation of dumps when a process crashes +ENV COMPlus_DbgEnableMiniDump="1" +# Create a base directory for dumps under /home so that the +# dumps are accessible from the build container too (since a runtime container might have already crashed) +ENV DUMP_DIR="/home/logs/dumps" +RUN mkdir -p "$DUMP_DIR" +RUN chmod 777 "$DUMP_DIR" + +WORKDIR /home/site/wwwroot + +ENTRYPOINT ["/bin/init_container.sh"] diff --git a/3.0/bin.zip b/3.0/bin.zip new file mode 100644 index 0000000000000000000000000000000000000000..e7d5156120d25b487f6c00c014c9f7a5fbf57272 GIT binary patch literal 51288 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
3Pnd?vey^Z+hM2CPt=gvA1M!}Z&o>uUxD*c; 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 KR$j)(Ks*4=bA`PC literal 0 HcmV?d00001 diff --git a/3.0/build.sh b/3.0/build.sh new file mode 100644 index 0000000..fe390bd --- /dev/null +++ b/3.0/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +cd src +sudo rm -rf bin obj publish +docker run --rm -v $(pwd):/src -w /src microsoft/dotnet:3.0-sdk /bin/bash -c "dotnet restore && dotnet publish -o publish" +cd publish +zip -r ../../bin.zip * +rm -rf ../publish ../out ../obj ../bin diff --git a/3.0/hostingstart.html b/3.0/hostingstart.html new file mode 100644 index 0000000..27ec948 --- /dev/null +++ b/3.0/hostingstart.html @@ -0,0 +1,51 @@ + + + + + + + Microsoft Azure App Service - Welcome + + + + + + + +
+
+
+
+
+
+
+
+
+

Hey, .NET Core developers!

+
+
+
+

Your app service is up and running.

+
+
+

Time to take the next step and deploy your code.

+
+
+

Have your code ready?
Use deployment center to get code published from your client or setup continuous deployment.

+

Don't have your code yet?
Follow our quickstart guide and you'll have a full app ready in 5 minutes or less.

+
+
+
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/3.0/init_container.sh b/3.0/init_container.sh new file mode 100644 index 0000000..e394ed4 --- /dev/null +++ b/3.0/init_container.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +cat >/etc/motd < + \/ \/ \/ +A P P S E R V I C E O N L I N U X + +Documentation: http://aka.ms/webapp-linux +Dotnet quickstart: https://aka.ms/dotnet-qs +.NETCore runtime version: `ls -X /usr/share/dotnet/shared/Microsoft.NETCore.App | tail -n 1` + +EOL +cat /etc/motd + +# Get environment variables to show up in SSH session +eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile) + +# starting sshd process +sed -i "s/SSH_PORT/$SSH_PORT/g" /etc/ssh/sshd_config +/usr/sbin/sshd + +# Format : coredump.hostname.processid.time +# Example: coredump.7d77b4ff1fea.15.1571222166 +containerName=`hostname` +export COMPlus_DbgMiniDumpName="$DUMP_DIR/coredump.$containerName.%d.$(date +%s)" + +appPath="/home/site/wwwroot" +runFromPath="/tmp/webapp" +startupCommandPath="/opt/startup/startup.sh" +defaultAppPath="/defaulthome/hostingstart/hostingstart.dll" +userStartupCommand="$@" + +# When run from copy is enabled, Oryx tries to run the app from a different directory (local to the container), +# so sanitize any input arguments which still reference the wwwroot path. This is true for VS Publish scenarios. +# Even though VS Publish team might fix this on their end, end users might not have upgraded their extension, so +# this code needs to be present. +if [ "$APP_SVC_RUN_FROM_COPY" = true ]; then + # Trim the ending '/' + appPath=$(echo "${appPath%/}") + runFromPath=$(echo "${runFromPath%/}") + userStartupCommand=$(echo $userStartupCommand | sed "s!$appPath!$runFromPath!g") + runFromPathArg="-runFromPath $runFromPath" +fi + +oryxArgs="-appPath $appPath -output $startupCommandPath -defaultAppFilePath $defaultAppPath \ + -bindPort $PORT -userStartupCommand '$userStartupCommand' $runFromPathArg" + +echo "Running oryx $oryxArgs" +eval oryx $oryxArgs +$startupCommandPath \ No newline at end of file diff --git a/3.0/src/.gitignore b/3.0/src/.gitignore new file mode 100644 index 0000000..e7679db --- /dev/null +++ b/3.0/src/.gitignore @@ -0,0 +1,38 @@ + +*.swp +*.*~ +project.lock.json +.DS_Store +*.pyc +nupkg/ + +# Visual Studio Code +.vscode + +# Rider +.idea + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +msbuild.log +msbuild.err +msbuild.wrn + +# Visual Studio 2015 +.vs/ diff --git a/3.0/src/Program.cs b/3.0/src/Program.cs new file mode 100644 index 0000000..e218692 --- /dev/null +++ b/3.0/src/Program.cs @@ -0,0 +1,19 @@ +using System; +using Microsoft.AspNetCore.Hosting; + +namespace hostingstart +{ + public class Program + { + public static void Main(string[] args) + { + var host = new WebHostBuilder() + .UseKestrel() + .UseStartup() + .UseWebRoot("/defaulthome/hostingstart/wwwroot") + .Build(); + + host.Run(); + } + } +} diff --git a/3.0/src/Startup.cs b/3.0/src/Startup.cs new file mode 100644 index 0000000..517d61c --- /dev/null +++ b/3.0/src/Startup.cs @@ -0,0 +1,21 @@ +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.FileProviders; +using Microsoft.AspNetCore.StaticFiles; + +namespace hostingstart +{ + public class Startup + { + public void Configure(IApplicationBuilder app) + { + var options = new DefaultFilesOptions(); + options.DefaultFileNames.Add("hostingstart.html"); + + app.UseDefaultFiles(options) + .UseStaticFiles(); + } + } +} diff --git a/3.0/src/hostingstart.csproj b/3.0/src/hostingstart.csproj new file mode 100644 index 0000000..340ad88 --- /dev/null +++ b/3.0/src/hostingstart.csproj @@ -0,0 +1,15 @@ + + + + netcoreapp3.0 + + + + + + + + + + + diff --git a/3.0/ssh_setup.sh b/3.0/ssh_setup.sh new file mode 100644 index 0000000..8bc40cc --- /dev/null +++ b/3.0/ssh_setup.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +if [ ! -f "/etc/ssh/ssh_host_rsa_key" ]; then + # generate fresh rsa key + ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa +fi + +if [ ! -f "/etc/ssh/ssh_host_dsa_key" ]; then + # generate fresh dsa key + ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa +fi + +if [ ! -f "/etc/ssh/ssh_host_ecdsa_key" ]; then + # generate fresh ecdsa key + ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t dsa +fi + +if [ ! -f "/etc/ssh/ssh_host_ed25519_key" ]; then + # generate fresh ecdsa key + ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N '' -t dsa +fi + +#prepare run dir +if [ ! -d "/var/run/sshd" ]; then + mkdir -p /var/run/sshd +fi diff --git a/3.0/sshd_config b/3.0/sshd_config new file mode 100644 index 0000000..aca8f95 --- /dev/null +++ b/3.0/sshd_config @@ -0,0 +1,16 @@ +# This is ssh server systemwide configuration file. +# +# /etc/sshd_config + +Port SSH_PORT +ListenAddress 0.0.0.0 +LoginGraceTime 180 +X11Forwarding yes +Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr +MACs hmac-sha1,hmac-sha1-96 +StrictModes yes +SyslogFacility DAEMON +PasswordAuthentication yes +PermitEmptyPasswords no +PermitRootLogin yes +Subsystem sftp internal-sftp