112 lines
3.1 KiB
Bash
Executable File
112 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#=============================================================================
|
|
# Copyright 2010-2012 Kitware, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#=============================================================================
|
|
|
|
# Run this script to set up ssh push access to the repository host.
|
|
|
|
# Project configuration instructions:
|
|
#
|
|
# - Populate adjacent "config" file with:
|
|
# ssh.host = Repository host name
|
|
# ssh.user = Username on host, if not "git"
|
|
# ssh.key = Local ssh key name
|
|
# ssh.request-url = Web page URL to request ssh access
|
|
|
|
egrep-q() {
|
|
egrep "$@" >/dev/null 2>/dev/null
|
|
}
|
|
|
|
die() {
|
|
echo 1>&2 "$@" ; exit 1
|
|
}
|
|
|
|
# Make sure we are inside the repository.
|
|
cd "${BASH_SOURCE%/*}" &&
|
|
|
|
# Load the project configuration.
|
|
host=$(git config -f config --get ssh.host) &&
|
|
user=$(git config -f config --get ssh.user || echo git) &&
|
|
key=$(git config -f config --get ssh.key) &&
|
|
request_url=$(git config -f config --get ssh.request-url) ||
|
|
die 'This project is not configured for ssh push access.'
|
|
|
|
# Check for existing configuration.
|
|
if test -r ~/.ssh/config &&
|
|
egrep-q 'Host[= ]'"${host//\./\\.}" ~/.ssh/config; then
|
|
echo 'Host "'"$host"'" is already in ~/.ssh/config' &&
|
|
setup= &&
|
|
question='Test'
|
|
else
|
|
echo 'Host "'"$host"'" not found in ~/.ssh/config' &&
|
|
setup=1 &&
|
|
question='Setup and test'
|
|
fi &&
|
|
|
|
# Ask the user whether to make changes.
|
|
echo '' &&
|
|
read -ep "${question} push access by ssh to $user@$host? [y/N]: " access &&
|
|
if test "$access" != "y" -a "$access" != "Y"; then
|
|
exit 0
|
|
fi &&
|
|
|
|
# Setup host configuration if necessary.
|
|
if test -n "$setup"; then
|
|
if ! test -d ~/.ssh; then
|
|
mkdir -p ~/.ssh &&
|
|
chmod 700 ~/.ssh
|
|
fi &&
|
|
if ! test -f ~/.ssh/config; then
|
|
touch ~/.ssh/config &&
|
|
chmod 600 ~/.ssh/config
|
|
fi &&
|
|
ssh_config='Host='"$host"'
|
|
IdentityFile ~/.ssh/'"$key" &&
|
|
echo "Adding to ~/.ssh/config:
|
|
|
|
$ssh_config
|
|
" &&
|
|
echo "$ssh_config" >> ~/.ssh/config &&
|
|
if ! test -e ~/.ssh/"$key"; then
|
|
if test -f ~/.ssh/id_rsa; then
|
|
# Take care of the common case.
|
|
ln -s id_rsa ~/.ssh/"$key"
|
|
echo '
|
|
Assuming ~/.ssh/id_rsa is the private key corresponding to the public key for
|
|
|
|
'"$user@$host"'
|
|
|
|
If this is incorrect place private key at "~/.ssh/'"$key"'".'
|
|
else
|
|
echo '
|
|
Place the private key corresponding to the public key registered for
|
|
|
|
'"$user@$host"'
|
|
|
|
at "~/.ssh/'"$key"'".'
|
|
fi
|
|
read -e -n 1 -p 'Press any key to continue...'
|
|
fi
|
|
fi || exit 1
|
|
|
|
# Test access configuration.
|
|
echo 'Testing ssh push access to "'"$user@$host"'"...' &&
|
|
if ! ssh "$user@$host" info; then
|
|
die 'No ssh push access to "'"$user@$host"'". You may need to request access at
|
|
|
|
'"$request_url"'
|
|
'
|
|
fi
|