blob: 70bbafdb71ca1efcc73a500687003adfb0aa95d2 [file] [log] [blame]
Kevin Steves9be6e262000-10-29 19:18:49 +00001#!/bin/sh
2#
Ben Lindstromb100ec92001-01-19 05:37:32 +00003# ssh-host-config, Copyright 2000, Red Hat Inc.
Kevin Steves9be6e262000-10-29 19:18:49 +00004#
5# This file is part of the Cygwin port of OpenSSH.
6
Kevin Steves9be6e262000-10-29 19:18:49 +00007# Subdirectory where the new package is being installed
8PREFIX=/usr
9
10# Directory where the config files are stored
11SYSCONFDIR=/etc
12
13# Subdirectory where an old package might be installed
14OLDPREFIX=/usr/local
15OLDSYSCONFDIR=${OLDPREFIX}/etc
16
Ben Lindstromb100ec92001-01-19 05:37:32 +000017progname=$0
18auto_answer=""
Damien Miller8ac0a7e2001-03-07 21:38:19 +110019port_number=22
Ben Lindstromb100ec92001-01-19 05:37:32 +000020
Kevin Steves9be6e262000-10-29 19:18:49 +000021request()
22{
Ben Lindstromb100ec92001-01-19 05:37:32 +000023 if [ "${auto_answer}" = "yes" ]
24 then
25 return 0
26 elif [ "${auto_answer}" = "no" ]
27 then
28 return 1
29 fi
30
Kevin Steves9be6e262000-10-29 19:18:49 +000031 answer=""
32 while [ "X${answer}" != "Xyes" -a "X${answer}" != "Xno" ]
33 do
34 echo -n "$1 (yes/no) "
35 read answer
36 done
37 if [ "X${answer}" = "Xyes" ]
38 then
39 return 0
40 else
41 return 1
42 fi
43}
44
Ben Lindstromb100ec92001-01-19 05:37:32 +000045# Check options
46
47while :
48do
49 case $# in
50 0)
51 break
52 ;;
53 esac
54
55 option=$1
56 shift
57
58 case "$option" in
59 -d | --debug )
60 set -x
61 ;;
62
63 -y | --yes )
64 auto_answer=yes
65 ;;
66
67 -n | --no )
68 auto_answer=no
69 ;;
70
Damien Miller8ac0a7e2001-03-07 21:38:19 +110071 -p | --port )
72 port_number=$1
73 shift
74 ;;
75
Ben Lindstromb100ec92001-01-19 05:37:32 +000076 *)
77 echo "usage: ${progname} [OPTION]..."
78 echo
79 echo "This script creates an OpenSSH host configuration."
80 echo
81 echo "Options:"
82 echo " --debug -d Enable shell's debug output."
83 echo " --yes -y Answer all questions with \"yes\" automatically."
84 echo " --no -n Answer all questions with \"no\" automatically."
Damien Miller8ac0a7e2001-03-07 21:38:19 +110085 echo " --port -p <n> sshd listens on port n."
Ben Lindstromb100ec92001-01-19 05:37:32 +000086 echo
87 exit 1
88 ;;
89
90 esac
91done
92
Kevin Steves9be6e262000-10-29 19:18:49 +000093# Check for running ssh/sshd processes first. Refuse to do anything while
94# some ssh processes are still running
95
96if ps -ef | grep -v grep | grep -q ssh
97then
98 echo
99 echo "There are still ssh processes running. Please shut them down first."
100 echo
101 exit 1
102fi
103
104# Check for ${SYSCONFDIR} directory
105
106if [ -e "${SYSCONFDIR}" -a ! -d "${SYSCONFDIR}" ]
107then
108 echo
109 echo "${SYSCONFDIR} is existant but not a directory."
110 echo "Cannot create global configuration files."
111 echo
112 exit 1
113fi
114
115# Create it if necessary
116
117if [ ! -e "${SYSCONFDIR}" ]
118then
119 mkdir "${SYSCONFDIR}"
120 if [ ! -e "${SYSCONFDIR}" ]
121 then
122 echo
123 echo "Creating ${SYSCONFDIR} directory failed"
124 echo
125 exit 1
126 fi
127fi
128
129# Check for an old installation in ${OLDPREFIX} unless ${OLDPREFIX} isn't
130# the same as ${PREFIX}
131
Ben Lindstromb100ec92001-01-19 05:37:32 +0000132old_install=0
Kevin Steves9be6e262000-10-29 19:18:49 +0000133if [ "${OLDPREFIX}" != "${PREFIX}" ]
134then
135 if [ -f "${OLDPREFIX}/sbin/sshd" ]
136 then
137 echo
138 echo "You seem to have an older installation in ${OLDPREFIX}."
139 echo
140 # Check if old global configuration files exist
141 if [ -f "${OLDSYSCONFDIR}/ssh_host_key" ]
142 then
143 if request "Do you want to copy your config files to your new installation?"
144 then
145 cp -f ${OLDSYSCONFDIR}/ssh_host_key ${SYSCONFDIR}
146 cp -f ${OLDSYSCONFDIR}/ssh_host_key.pub ${SYSCONFDIR}
147 cp -f ${OLDSYSCONFDIR}/ssh_host_dsa_key ${SYSCONFDIR}
148 cp -f ${OLDSYSCONFDIR}/ssh_host_dsa_key.pub ${SYSCONFDIR}
149 cp -f ${OLDSYSCONFDIR}/ssh_config ${SYSCONFDIR}
150 cp -f ${OLDSYSCONFDIR}/sshd_config ${SYSCONFDIR}
151 fi
152 fi
153 if request "Do you want to erase your old installation?"
154 then
155 rm -f ${OLDPREFIX}/bin/ssh.exe
156 rm -f ${OLDPREFIX}/bin/ssh-config
157 rm -f ${OLDPREFIX}/bin/scp.exe
158 rm -f ${OLDPREFIX}/bin/ssh-add.exe
159 rm -f ${OLDPREFIX}/bin/ssh-agent.exe
160 rm -f ${OLDPREFIX}/bin/ssh-keygen.exe
161 rm -f ${OLDPREFIX}/bin/slogin
162 rm -f ${OLDSYSCONFDIR}/ssh_host_key
163 rm -f ${OLDSYSCONFDIR}/ssh_host_key.pub
164 rm -f ${OLDSYSCONFDIR}/ssh_host_dsa_key
165 rm -f ${OLDSYSCONFDIR}/ssh_host_dsa_key.pub
166 rm -f ${OLDSYSCONFDIR}/ssh_config
167 rm -f ${OLDSYSCONFDIR}/sshd_config
168 rm -f ${OLDPREFIX}/man/man1/ssh.1
169 rm -f ${OLDPREFIX}/man/man1/scp.1
170 rm -f ${OLDPREFIX}/man/man1/ssh-add.1
171 rm -f ${OLDPREFIX}/man/man1/ssh-agent.1
172 rm -f ${OLDPREFIX}/man/man1/ssh-keygen.1
173 rm -f ${OLDPREFIX}/man/man1/slogin.1
174 rm -f ${OLDPREFIX}/man/man8/sshd.8
175 rm -f ${OLDPREFIX}/sbin/sshd.exe
176 rm -f ${OLDPREFIX}/sbin/sftp-server.exe
177 fi
Ben Lindstromb100ec92001-01-19 05:37:32 +0000178 old_install=1
Kevin Steves9be6e262000-10-29 19:18:49 +0000179 fi
180fi
181
182# First generate host keys if not already existing
183
184if [ ! -f "${SYSCONFDIR}/ssh_host_key" ]
185then
186 echo "Generating ${SYSCONFDIR}/ssh_host_key"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000187 ssh-keygen -t rsa1 -f ${SYSCONFDIR}/ssh_host_key -N '' > /dev/null
188fi
189
190if [ ! -f "${SYSCONFDIR}/ssh_host_rsa_key" ]
191then
192 echo "Generating ${SYSCONFDIR}/ssh_host_rsa_key"
193 ssh-keygen -t rsa -f ${SYSCONFDIR}/ssh_host_rsa_key -N '' > /dev/null
Kevin Steves9be6e262000-10-29 19:18:49 +0000194fi
195
196if [ ! -f "${SYSCONFDIR}/ssh_host_dsa_key" ]
197then
198 echo "Generating ${SYSCONFDIR}/ssh_host_dsa_key"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000199 ssh-keygen -t dsa -f ${SYSCONFDIR}/ssh_host_dsa_key -N '' > /dev/null
Kevin Steves9be6e262000-10-29 19:18:49 +0000200fi
201
202# Check if ssh_config exists. If yes, ask for overwriting
203
204if [ -f "${SYSCONFDIR}/ssh_config" ]
205then
206 if request "Overwrite existing ${SYSCONFDIR}/ssh_config file?"
207 then
208 rm -f "${SYSCONFDIR}/ssh_config"
209 if [ -f "${SYSCONFDIR}/ssh_config" ]
210 then
211 echo "Can't overwrite. ${SYSCONFDIR}/ssh_config is write protected."
212 fi
213 fi
214fi
215
216# Create default ssh_config from here script
217
218if [ ! -f "${SYSCONFDIR}/ssh_config" ]
219then
Ben Lindstromb100ec92001-01-19 05:37:32 +0000220 echo "Generating ${SYSCONFDIR}/ssh_config file"
Kevin Steves9be6e262000-10-29 19:18:49 +0000221 cat > ${SYSCONFDIR}/ssh_config << EOF
222# This is ssh client systemwide configuration file. This file provides
223# defaults for users, and the values can be changed in per-user configuration
224# files or on the command line.
225
226# Configuration data is parsed as follows:
227# 1. command line options
228# 2. user-specific file
229# 3. system-wide file
230# Any configuration value is only changed the first time it is set.
231# Thus, host-specific definitions should be at the beginning of the
232# configuration file, and defaults at the end.
233
234# Site-wide defaults for various options
235
236# Host *
237# ForwardAgent yes
238# ForwardX11 yes
239# RhostsAuthentication yes
240# RhostsRSAAuthentication yes
241# RSAAuthentication yes
242# PasswordAuthentication yes
243# FallBackToRsh no
244# UseRsh no
245# BatchMode no
246# CheckHostIP yes
247# StrictHostKeyChecking no
Kevin Steves9be6e262000-10-29 19:18:49 +0000248# Port 22
249# Protocol 2,1
250# Cipher 3des
251# EscapeChar ~
252
253# Be paranoid by default
254Host *
255 ForwardAgent no
256 ForwardX11 no
257 FallBackToRsh no
Ben Lindstromb100ec92001-01-19 05:37:32 +0000258
259# Try authentification with the following identities
260 IdentityFile ~/.ssh/identity
261 IdentityFile ~/.ssh/id_rsa
262 IdentityFile ~/.ssh/id_dsa
Kevin Steves9be6e262000-10-29 19:18:49 +0000263EOF
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100264 if [ "$port_number" != "22" ]
265 then
266 echo "Host localhost" >> ${SYSCONFDIR}/ssh_config
267 echo " Port $port_number" >> ${SYSCONFDIR}/ssh_config
268 fi
Kevin Steves9be6e262000-10-29 19:18:49 +0000269fi
270
271# Check if sshd_config exists. If yes, ask for overwriting
272
273if [ -f "${SYSCONFDIR}/sshd_config" ]
274then
275 if request "Overwrite existing ${SYSCONFDIR}/sshd_config file?"
276 then
277 rm -f "${SYSCONFDIR}/sshd_config"
278 if [ -f "${SYSCONFDIR}/sshd_config" ]
279 then
280 echo "Can't overwrite. ${SYSCONFDIR}/sshd_config is write protected."
281 fi
282 fi
283fi
284
285# Create default sshd_config from here script
286
287if [ ! -f "${SYSCONFDIR}/sshd_config" ]
288then
Ben Lindstromb100ec92001-01-19 05:37:32 +0000289 echo "Generating ${SYSCONFDIR}/sshd_config file"
Kevin Steves9be6e262000-10-29 19:18:49 +0000290 cat > ${SYSCONFDIR}/sshd_config << EOF
291# This is ssh server systemwide configuration file.
292
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100293Port $port_number
Ben Lindstromb100ec92001-01-19 05:37:32 +0000294#
295Protocol 2,1
Kevin Steves9be6e262000-10-29 19:18:49 +0000296ListenAddress 0.0.0.0
297#ListenAddress ::
Ben Lindstromb100ec92001-01-19 05:37:32 +0000298#
299# Uncomment the following lines according to the used authentication
300HostKey /etc/ssh_host_key
301HostKey /etc/ssh_host_rsa_key
302HostKey /etc/ssh_host_dsa_key
Kevin Steves9be6e262000-10-29 19:18:49 +0000303ServerKeyBits 768
304LoginGraceTime 600
305KeyRegenerationInterval 3600
306PermitRootLogin yes
307#
308# Don't read ~/.rhosts and ~/.shosts files
309IgnoreRhosts yes
310# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
311#IgnoreUserKnownHosts yes
312StrictModes yes
313X11Forwarding no
314X11DisplayOffset 10
315PrintMotd yes
316KeepAlive yes
317
318# Logging
319SyslogFacility AUTH
320LogLevel INFO
321#obsoletes QuietMode and FascistLogging
322
323RhostsAuthentication no
324#
325# For this to work you will also need host keys in /etc/ssh_known_hosts
326RhostsRSAAuthentication no
327
328# To install for logon to different user accounts change to "no" here
329RSAAuthentication yes
330
331# To install for logon to different user accounts change to "yes" here
332PasswordAuthentication no
333
334PermitEmptyPasswords no
335
336CheckMail no
337UseLogin no
338
339#Uncomment if you want to enable sftp
340#Subsystem sftp /usr/sbin/sftp-server
341#MaxStartups 10:30:60
342EOF
343fi
344
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100345# Care for services file
Ben Lindstromb100ec92001-01-19 05:37:32 +0000346_sys="`uname -a`"
347_nt=`expr "$_sys" : "CYGWIN_NT"`
348if [ $_nt -gt 0 ]
Kevin Steves9be6e262000-10-29 19:18:49 +0000349then
Ben Lindstromb100ec92001-01-19 05:37:32 +0000350 _wservices="${SYSTEMROOT}\\system32\\drivers\\etc\\services"
351 _wserv_tmp="${SYSTEMROOT}\\system32\\drivers\\etc\\srv.out.$$"
352else
353 _wservices="${WINDIR}\\SERVICES"
354 _wserv_tmp="${WINDIR}\\SERV.$$"
Kevin Steves9be6e262000-10-29 19:18:49 +0000355fi
Ben Lindstromb100ec92001-01-19 05:37:32 +0000356_services=`cygpath -u "${_wservices}"`
357_serv_tmp=`cygpath -u "${_wserv_tmp}"`
Kevin Steves9be6e262000-10-29 19:18:49 +0000358
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100359mount -t -f "${_wservices}" "${_services}"
360mount -t -f "${_wserv_tmp}" "${_serv_tmp}"
Kevin Steves9be6e262000-10-29 19:18:49 +0000361
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100362# Remove sshd 22/port from services
363if [ `grep -q 'sshd[ \t][ \t]*22' "${_services}"; echo $?` -eq 0 ]
Kevin Steves9be6e262000-10-29 19:18:49 +0000364then
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100365 grep -v 'sshd[ \t][ \t]*22' "${_services}" > "${_serv_tmp}"
366 if [ -f "${_serv_tmp}" ]
367 then
368 if mv "${_serv_tmp}" "${_services}"
369 then
370 echo "Removing sshd from ${_services}"
371 else
372 echo "Removing sshd from ${_services} failed\!"
373 fi
374 rm -f "${_serv_tmp}"
375 else
376 echo "Removing sshd from ${_services} failed\!"
377 fi
378fi
379
380# Add ssh 22/tcp and ssh 22/udp to services
381if [ `grep -q 'ssh[ \t][ \t]*22' "${_services}"; echo $?` -ne 0 ]
382then
383 awk '{ if ( $2 ~ /^23\/tcp/ ) print "ssh 22/tcp #SSH Remote Login Protocol\nssh 22/udp #SSH Remote Login Protocol"; print $0; }' < "${_services}" > "${_serv_tmp}"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000384 if [ -f "${_serv_tmp}" ]
Kevin Steves9be6e262000-10-29 19:18:49 +0000385 then
Ben Lindstromb100ec92001-01-19 05:37:32 +0000386 if mv "${_serv_tmp}" "${_services}"
387 then
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100388 echo "Added ssh to ${_services}"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000389 else
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100390 echo "Adding ssh to ${_services} failed\!"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000391 fi
392 rm -f "${_serv_tmp}"
393 else
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100394 echo "Adding ssh to ${_services} failed\!"
Kevin Steves9be6e262000-10-29 19:18:49 +0000395 fi
396fi
397
Ben Lindstromb100ec92001-01-19 05:37:32 +0000398umount "${_services}"
399umount "${_serv_tmp}"
400
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100401# Care for inetd.conf file
402_inetcnf="/etc/inetd.conf"
403_inetcnf_tmp="/etc/inetd.conf.$$"
404
405if [ -f "${_inetcnf}" ]
Kevin Steves9be6e262000-10-29 19:18:49 +0000406then
Damien Miller8ac0a7e2001-03-07 21:38:19 +1100407 # Check if ssh service is already in use as sshd
408 with_comment=1
409 grep -q '^[ \t]*sshd' "${_inetcnf}" && with_comment=0
410 # Remove sshd line from inetd.conf
411 if [ `grep -q '^[# \t]*sshd' "${_inetcnf}"; echo $?` -eq 0 ]
412 then
413 grep -v '^[# \t]*sshd' "${_inetcnf}" >> "${_inetcnf_tmp}"
414 if [ -f "${_inetcnf_tmp}" ]
415 then
416 if mv "${_inetcnf_tmp}" "${_inetcnf}"
417 then
418 echo "Removed sshd from ${_inetcnf}"
419 else
420 echo "Removing sshd from ${_inetcnf} failed\!"
421 fi
422 rm -f "${_inetcnf_tmp}"
423 else
424 echo "Removing sshd from ${_inetcnf} failed\!"
425 fi
426 fi
427
428 # Add ssh line to inetd.conf
429 if [ `grep -q '^[# \t]*ssh' "${_inetcnf}"; echo $?` -ne 0 ]
430 then
431 if [ "${with_comment}" -eq 0 ]
432 then
433 echo 'ssh stream tcp nowait root /usr/sbin/sshd -i' >> "${_inetcnf}"
434 else
435 echo '# ssh stream tcp nowait root /usr/sbin/sshd -i' >> "${_inetcnf}"
436 fi
437 echo "Added ssh to ${_inetcnf}"
438 fi
Kevin Steves9be6e262000-10-29 19:18:49 +0000439fi
440
Ben Lindstromb100ec92001-01-19 05:37:32 +0000441if [ "${old_install}" = "1" ]
Kevin Steves9be6e262000-10-29 19:18:49 +0000442then
Ben Lindstromb100ec92001-01-19 05:37:32 +0000443 echo
444 echo "Note: If you have used sshd as service or from inetd, don't forget to"
445 echo " change the path to sshd.exe in the service entry or in inetd.conf."
Kevin Steves9be6e262000-10-29 19:18:49 +0000446fi
447
448echo
Ben Lindstromb100ec92001-01-19 05:37:32 +0000449echo "Host configuration finished. Have fun!"