1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
1 |
#!/bin/bash
|
2 |
||
3 |
#
|
|
4 |
# lxc: linux Container library
|
|
5 |
||
6 |
# Authors:
|
|
7 |
# Daniel Lezcano <daniel.lezcano@free.fr>
|
|
8 |
||
9 |
# This library is free software; you can redistribute it and/or
|
|
10 |
# modify it under the terms of the GNU Lesser General Public
|
|
11 |
# License as published by the Free Software Foundation; either
|
|
12 |
# version 2.1 of the License, or (at your option) any later version.
|
|
13 |
||
14 |
# This library is distributed in the hope that it will be useful,
|
|
15 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
17 |
# Lesser General Public License for more details.
|
|
18 |
||
19 |
# You should have received a copy of the GNU Lesser General Public
|
|
20 |
# License along with this library; if not, write to the Free Software
|
|
21 |
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
22 |
||
23 |
install_sshd()
|
|
24 |
{
|
|
25 |
rootfs=$1 |
|
26 |
||
27 |
tree="\ |
|
28 |
$rootfs/var/run/sshd \ |
|
29 |
$rootfs/var/empty/sshd \ |
|
30 |
$rootfs/var/lib/empty/sshd \ |
|
31 |
$rootfs/etc/ssh \ |
|
32 |
$rootfs/dev/shm \ |
|
35
by Serge Hallyn
* debian/rules: use --with-rootfs-path=/usr/lib/lxc/root. (LP: #838410) |
33 |
$rootfs/run/shm \ |
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
34 |
$rootfs/proc \ |
35 |
$rootfs/bin \ |
|
36 |
$rootfs/sbin \ |
|
37 |
$rootfs/usr \ |
|
38 |
$rootfs/tmp \ |
|
39 |
$rootfs/home \ |
|
40 |
$rootfs/root \ |
|
41 |
$rootfs/lib \ |
|
42 |
$rootfs/lib64" |
|
43 |
||
44 |
mkdir -p $tree
|
|
45 |
if [ $? -ne 0 ]; then |
|
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
46 |
return 1 |
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
47 |
fi
|
48 |
||
49 |
return 0 |
|
50 |
}
|
|
51 |
||
52 |
configure_sshd()
|
|
53 |
{
|
|
54 |
rootfs=$1 |
|
55 |
||
56 |
cat <<EOF > $rootfs/etc/passwd
|
|
57 |
root:x:0:0:root:/root:/bin/bash
|
|
58 |
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
|
|
59 |
EOF
|
|
60 |
||
61 |
cat <<EOF > $rootfs/etc/group
|
|
62 |
root:x:0:root
|
|
63 |
sshd:x:74:
|
|
64 |
EOF
|
|
65 |
||
66 |
ssh-keygen -t rsa -f $rootfs/etc/ssh/ssh_host_rsa_key
|
|
67 |
ssh-keygen -t dsa -f $rootfs/etc/ssh/ssh_host_dsa_key
|
|
68 |
||
69 |
# by default setup root password with no password
|
|
70 |
cat <<EOF > $rootfs/etc/ssh/sshd_config
|
|
71 |
Port 22
|
|
72 |
Protocol 2
|
|
73 |
HostKey /etc/ssh/ssh_host_rsa_key
|
|
74 |
HostKey /etc/ssh/ssh_host_dsa_key
|
|
75 |
UsePrivilegeSeparation yes
|
|
76 |
KeyRegenerationInterval 3600
|
|
77 |
ServerKeyBits 768
|
|
78 |
SyslogFacility AUTH
|
|
79 |
LogLevel INFO
|
|
80 |
LoginGraceTime 120
|
|
81 |
PermitRootLogin yes
|
|
82 |
StrictModes yes
|
|
83 |
RSAAuthentication yes
|
|
84 |
PubkeyAuthentication yes
|
|
85 |
IgnoreRhosts yes
|
|
86 |
RhostsRSAAuthentication no
|
|
87 |
HostbasedAuthentication no
|
|
88 |
PermitEmptyPasswords yes
|
|
89 |
ChallengeResponseAuthentication no
|
|
90 |
EOF
|
|
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
91 |
|
92 |
if [ -n "$auth_key" -a -f "$auth_key" ]; then |
|
93 |
u_path="/root/.ssh" |
|
94 |
root_u_path="$rootfs/$u_path" |
|
95 |
mkdir -p $root_u_path
|
|
96 |
cp $auth_key "$root_u_path/authorized_keys" |
|
97 |
chown -R 0:0 "$rootfs/$u_path" |
|
98 |
chmod 700 "$rootfs/$u_path" |
|
99 |
||
100 |
echo "Inserted SSH public key from $auth_key into /home/ubuntu/.ssh/authorized_keys" |
|
101 |
fi
|
|
102 |
||
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
103 |
return 0 |
104 |
}
|
|
105 |
||
106 |
copy_configuration()
|
|
107 |
{
|
|
108 |
path=$1 |
|
109 |
rootfs=$2 |
|
110 |
name=$3 |
|
111 |
||
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
112 |
cat <<EOF >> $path/config
|
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
113 |
lxc.utsname = $name
|
114 |
lxc.pts = 1024
|
|
115 |
lxc.rootfs = $rootfs
|
|
89
by Serge Hallyn
* debian/lxc-default.apparmor: explicitly silence warnings about attempting |
116 |
# uncomment the next line to run the container unconfined:
|
117 |
#lxc.aa_profile = unconfined
|
|
81
by Serge Hallyn
* add lxc-shutdown command: |
118 |
lxc.mount.entry=/dev dev none ro,bind 0 0
|
119 |
lxc.mount.entry=/lib lib none ro,bind 0 0
|
|
120 |
lxc.mount.entry=/bin bin none ro,bind 0 0
|
|
121 |
lxc.mount.entry=/usr usr none ro,bind 0 0
|
|
122 |
lxc.mount.entry=/sbin sbin none ro,bind 0 0
|
|
123 |
lxc.mount.entry=tmpfs var/run/sshd tmpfs mode=0644 0 0
|
|
124 |
lxc.mount.entry=@LXCTEMPLATEDIR@/lxc-sshd sbin/init none bind 0 0
|
|
125 |
lxc.mount.entry=proc proc proc nodev,noexec,nosuid 0 0
|
|
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
126 |
EOF
|
127 |
||
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
128 |
# if no .ipv4 section in config, then have the container run dhcp
|
129 |
grep -q "^lxc.network.ipv4" $path/config || touch $rootfs/run-dhcp |
|
130 |
||
131 |
if [ "$(uname -m)" = "x86_64" ]; then |
|
132 |
cat <<EOF >> $path/config
|
|
81
by Serge Hallyn
* add lxc-shutdown command: |
133 |
lxc.mount.entry=/lib64 lib64 none ro,bind 0 0
|
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
134 |
EOF
|
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
135 |
fi
|
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
136 |
}
|
137 |
||
138 |
usage()
|
|
139 |
{
|
|
140 |
cat <<EOF
|
|
141 |
$1 -h|--help -p|--path=<path>
|
|
142 |
EOF
|
|
143 |
return 0 |
|
144 |
}
|
|
145 |
||
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
146 |
options=$(getopt -o hp:n:S: -l help,path:,name:,auth-key: -- "$@") |
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
147 |
if [ $? -ne 0 ]; then |
148 |
usage $(basename $0) |
|
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
149 |
exit 1 |
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
150 |
fi
|
151 |
eval set -- "$options" |
|
152 |
||
153 |
while true |
|
154 |
do
|
|
155 |
case "$1" in |
|
156 |
-h|--help) usage $0 && exit 0;; |
|
157 |
-p|--path) path=$2; shift 2;; |
|
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
158 |
-n|--name) name=$2; shift 2;; |
159 |
-S|--auth-key) auth_key=$2; shift 2;; |
|
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
160 |
--) shift 1; break ;; |
161 |
*) break ;; |
|
162 |
esac
|
|
163 |
done
|
|
164 |
||
165 |
if [ "$(id -u)" != "0" ]; then |
|
166 |
echo "This script should be run as 'root'" |
|
167 |
exit 1 |
|
168 |
fi
|
|
169 |
||
170 |
if [ $0 == "/sbin/init" ]; then |
|
171 |
||
172 |
type @LXCINITDIR@/lxc-init
|
|
173 |
if [ $? -ne 0 ]; then |
|
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
174 |
echo "'lxc-init is not accessible on the system" |
175 |
exit 1 |
|
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
176 |
fi
|
177 |
||
178 |
type sshd
|
|
179 |
if [ $? -ne 0 ]; then |
|
67
by Serge Hallyn
* 0045-fix-other-templates: lots of template fixes. Make sshd, debian, |
180 |
echo "'sshd' is not accessible on the system " |
181 |
exit 1 |
|
182 |
fi
|
|
183 |
||
184 |
# run dhcp?
|
|
185 |
if [ -f /run-dhcp ]; then |
|
186 |
type dhclient
|
|
187 |
if [ $? -ne 0 ]; then |
|
188 |
echo "can't find dhclient" |
|
189 |
exit 1 |
|
190 |
fi
|
|
191 |
touch /etc/fstab |
|
192 |
rm -f /dhclient.conf |
|
193 |
cat > /dhclient.conf << EOF
|
|
194 |
send host-name "<hostname>";
|
|
195 |
EOF
|
|
196 |
ifconfig eth0 up |
|
197 |
dhclient eth0 -cf /dhclient.conf |
|
1.2.4
by Guido Trotter
Import upstream version 0.7.1 |
198 |
fi
|
199 |
||
200 |
exec @LXCINITDIR@/lxc-init -- /usr/sbin/sshd
|
|
201 |
exit 1 |
|
202 |
fi
|
|
203 |
||
204 |
if [ -z "$path" ]; then |
|
205 |
echo "'path' parameter is required" |
|
206 |
exit 1 |
|
207 |
fi
|
|
208 |
||
209 |
rootfs=$path/rootfs |
|
210 |
||
211 |
install_sshd $rootfs
|
|
212 |
if [ $? -ne 0 ]; then |
|
213 |
echo "failed to install sshd's rootfs" |
|
214 |
exit 1 |
|
215 |
fi
|
|
216 |
||
217 |
configure_sshd $rootfs
|
|
218 |
if [ $? -ne 0 ]; then |
|
219 |
echo "failed to configure sshd template" |
|
220 |
exit 1 |
|
221 |
fi
|
|
222 |
||
223 |
copy_configuration $path $rootfs $name |
|
224 |
if [ $? -ne 0 ]; then |
|
225 |
echo "failed to write configuration file" |
|
226 |
exit 1 |
|
227 |
fi
|