parent
a9c6248b05
commit
c80dca759c
@ -1,3 +1,32 @@
|
|||||||
# ssh
|
# ssh
|
||||||
|
|
||||||
Scripts for SSH
|
Scripts for SSH
|
||||||
|
|
||||||
|
**PLEASE NOTE:** These scripts should be considered experimental. Test on non-production or backed-up data first.
|
||||||
|
|
||||||
|
bup2ssh
|
||||||
|
: Backup a machine writing the contents to a remote machine via `ssh`
|
||||||
|
|
||||||
|
cp2chroot
|
||||||
|
: Copies a binary and its dependencies into a minimal chroot
|
||||||
|
|
||||||
|
keepssh
|
||||||
|
: Executes `ssh` in a loop for automatic reconnections
|
||||||
|
|
||||||
|
mkminchroot
|
||||||
|
: Makes a minimal chroot
|
||||||
|
|
||||||
|
ssh-multirun
|
||||||
|
: Runs the same command on multiple machines
|
||||||
|
|
||||||
|
ssh-reboot
|
||||||
|
: Reboots a machine via `ssh`
|
||||||
|
|
||||||
|
ssh-shutdown
|
||||||
|
: Shuts down a machine via `ssh`
|
||||||
|
|
||||||
|
sshauth
|
||||||
|
: Toggle security for a user's `.ssh` folder
|
||||||
|
|
||||||
|
sshdpw
|
||||||
|
: Toggle password acceptance for the `ssh` deamon
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
HOST="${1}"
|
||||||
|
BDIR="${2}"
|
||||||
|
|
||||||
|
XZ_OPTS=-9e tar -cvpJ --one-file-system / | ssh "${HOST}" "( cat > ${BDIR}/${HOSTNAME}_$(date +%Y-%m-%d_%H:%M).tar.xz )"
|
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
# Use this script to copy shared (libs) files to a chroot/jail.
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Written by BrainwreckedTech <http://www.brainwrecked.us>
|
||||||
|
# (c) 2014 BrainwreckedTech under GNU GPL v2.0+
|
||||||
|
# + Changed script to die if chroot/jail dir doesn't exist
|
||||||
|
# + Changed chroot/jail dir to be specified on command line
|
||||||
|
# + Added copying of binary to chroot/jail
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Orginally written by nixCraft <http://www.cyberciti.biz/tips/>
|
||||||
|
# (c) 2006 nixCraft under GNU GPL v2.0+
|
||||||
|
# + Added ld-linux support
|
||||||
|
# + Added error checking support
|
||||||
|
# -------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
print_help () {
|
||||||
|
echo " Syntax: $0 /path/to/jail /path/to/executable"
|
||||||
|
echo "Example: $0 /srv/jail/backup /usr/bin/rsync"
|
||||||
|
}
|
||||||
|
|
||||||
|
[ ! -d "${1}" ] && echo "${1} does not exist" && print_help && exit 1
|
||||||
|
[ ! -f "${2}" ] && echo "${2} does not exist" && print_help && exit 2
|
||||||
|
|
||||||
|
cp -v "${2}" "${1}${2}"
|
||||||
|
|
||||||
|
while read -r FILE; do
|
||||||
|
FDIR="$(dirname "${FILE}")"
|
||||||
|
[ ! -d "${1}${FDIR}" ] && mkdir -p "${1}${FDIR}"
|
||||||
|
cp -v "${FILE}" "${1}${FDIR}"
|
||||||
|
done < "$(ldd "${2}" | awk '{ print $3 }' | egrep -v ^'\(')"
|
||||||
|
|
||||||
|
|
||||||
|
SLDL="$(ldd "${2}" | grep 'ld-linux' | awk '{ print $1}')"
|
||||||
|
SDIR="$(dirname "${SLDL}")"
|
||||||
|
|
||||||
|
[ ! -f "${1}${SLDL}" ] && cp -v "${SLDL}" "${1}${SDIR}"
|
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
ssh ${@}
|
||||||
|
echo "Connection lost at $(date +%H:%M:%S)."
|
||||||
|
|
||||||
|
for I in {15..1}; do
|
||||||
|
echo -ne "\rIdling for ${I} seconds... "; sleep 1
|
||||||
|
done
|
||||||
|
echo ''
|
||||||
|
|
||||||
|
TSTP="$(date +%H:%M:%S)"; dig +time=2 ${@} &> /dev/null; RSLT=${?}
|
||||||
|
while [ ${RSLT} -ne 0 ]; do
|
||||||
|
for I in {9..1}; do
|
||||||
|
echo -ne "\rHost lookup failed at ${TSTP}. Retrying in ${I}... "; sleep 1
|
||||||
|
done
|
||||||
|
echo ''
|
||||||
|
TSTP="$(date +%H:%M:%S)"; dig +time=2 ${@} &> /dev/null; RSLT=${?}
|
||||||
|
done
|
||||||
|
echo "Host lookup succeeded at ${TSTP}."
|
||||||
|
|
||||||
|
TSTP="$(date +%H:%M:%S)"; ping -c 1 -W 2 ${@} &> /dev/null; RSLT=${?}
|
||||||
|
while [ ${RSLT} -ne 0 ]; do
|
||||||
|
for I in {9..1}; do
|
||||||
|
echo -ne "\rPinging host failed at ${TSTP}. Retrying in ${I}... "; sleep 1
|
||||||
|
done
|
||||||
|
echo ''
|
||||||
|
TSTP="$(date +%H:%M:%S)"; ping -c 1 -W 2 ${@} &> /dev/null; RSLT=${?}
|
||||||
|
done
|
||||||
|
echo "Host ping succeeded at ${TSTP}."
|
||||||
|
|
||||||
|
for I in {5..1}; do
|
||||||
|
echo -ne "\rRetrying SSH connection in ${I}... "; sleep 1
|
||||||
|
done
|
||||||
|
echo ''
|
||||||
|
done
|
@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
[ "$(id -u)" -ne "0" ] && echo 'MUST BE ROOT!' && exit 1
|
||||||
|
|
||||||
|
echo ':: MAKING CHROOT DIRECTORIES...'
|
||||||
|
|
||||||
|
for DIR in dev etc usr usr/bin usr/lib; do
|
||||||
|
mkdir -pv "${1}/${DIR}"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ':: MAKING COMPAT SYMLINKS...'
|
||||||
|
|
||||||
|
ln -sv usr/bin "${1}/bin"
|
||||||
|
ln -sv usr/bin "${1}/sbin"
|
||||||
|
ln -sv usr/lib "${1}/lib"
|
||||||
|
ln -sv usr/lib "${1}/lib64"
|
||||||
|
ln -sv lib "${1}/usr/lib64"
|
||||||
|
ln -sv sbin "${1}/usr/bin"
|
||||||
|
|
||||||
|
echo ':: GIVING ROOT OWNERSHIP OF CHROOT...'
|
||||||
|
|
||||||
|
chown -v root:root "${1}"
|
||||||
|
|
||||||
|
echo ':: MAKING /DEV/NULL...'
|
||||||
|
|
||||||
|
mknod -m 666 "${1}/dev/null" c 1 3
|
||||||
|
|
||||||
|
echo ':: MAKING MINIMUM /ETC ENTRIES...'
|
||||||
|
|
||||||
|
cp -av /etc/ld.so.cache "${1}/etc"
|
||||||
|
cp -av /etc/ld.so.conf "${1}/etc"
|
||||||
|
cp -av /etc/nsswitch.conf "${1}/etc"
|
||||||
|
ln -sv /etc/hosts "${1}/etc"
|
@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
COMMAND="${1}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
while [ "${#}" -gt 0 ]; do
|
||||||
|
printf '%40s\r%s\n' '' "${1}" | tr ' ' '-'
|
||||||
|
[ "${1}" = "local" ] && { bash -c "${COMMAND}"; true; } || ssh -t "${1}" "${COMMAND}"
|
||||||
|
shift
|
||||||
|
done
|
@ -0,0 +1,2 @@
|
|||||||
|
sudo bash -c "shutdown -r &"
|
||||||
|
exit
|
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
sudo bash -c 'shutdown -h &'
|
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
ssh_lock() {
|
||||||
|
sudo chmod -v 400 "${HOME}"/.ssh/*
|
||||||
|
sudo chattr -V +i "${HOME}"/.ssh/authorized_keys
|
||||||
|
sudo chattr -V +i "${HOME}"/.ssh
|
||||||
|
}
|
||||||
|
|
||||||
|
ssh_unlock() {
|
||||||
|
sudo chattr -V -i "${HOME}"/.ssh
|
||||||
|
sudo chattr -V -i "${HOME}"/.ssh/authorized_keys
|
||||||
|
sudo chmod -v 600 "${HOME}"/.ssh/*
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${1}" in
|
||||||
|
"lock")
|
||||||
|
printf "\033[34m:: \033[97m Locking %s/.ssh\033[0m" "${HOME}"
|
||||||
|
ssh_lock
|
||||||
|
;;
|
||||||
|
"unlock")
|
||||||
|
printf "\033[34m:: \033[97m Unlocking %s/.ssh\033[0m" "${HOME}"
|
||||||
|
ssh_unlock
|
||||||
|
;;
|
||||||
|
"toggle")
|
||||||
|
DA=$(lsattr -d "${HOME}/.ssh" | cut -d\ -f1 | grep -q 'i')$?
|
||||||
|
FA=$(lsattr "${HOME}/.ssh/authorized_keys" | cut -d\ -f1 | grep -q 'i')$?
|
||||||
|
FP=$(stat -c "%A" "${HOME}/.ssh/authorized_keys" | grep -q 'w')$?
|
||||||
|
if [ "${DA}" -eq 0 ] && [ "${FA}" -eq 0 ] && [ "${FP}" -ne 0 ]; then
|
||||||
|
printf "\033[34m:: \033[97m %s/.ssh secured...unlocking\033[0m" "${HOME}"
|
||||||
|
ssh_unlock
|
||||||
|
else
|
||||||
|
printf "\033[34m:: \033[97m %s/.ssh insecure...locking\033[0m" "${HOME}"
|
||||||
|
ssh_lock
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
[ ! "$(id -u)" -eq 0 ] && echo "Run as superuser." && exit 1
|
||||||
|
|
||||||
|
case "${1}" in
|
||||||
|
"on"|"enable"|"unlock")
|
||||||
|
FROM=yes; TO=no;
|
||||||
|
;;
|
||||||
|
"off"|"disable"|"lock")
|
||||||
|
FROM=no; TO=yes;
|
||||||
|
;;
|
||||||
|
"toggle")
|
||||||
|
if grep -q '^PasswordAuthentication yes' /etc/ssh/sshd_config; then
|
||||||
|
FROM=yes; TO=no;
|
||||||
|
else
|
||||||
|
FROM=no; TO=yes;
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
for OPTION in PasswordAuthentication ChallengeResponseAuthentication; do
|
||||||
|
sed -i "s/#* *${OPTION} *${FROM}/${OPTION} ${TO}/g; w /dev/stdout" /etc/ssh/sshd_config
|
||||||
|
done
|
||||||
|
|
||||||
|
if command -v systemctl > /dev/null; then
|
||||||
|
systemctl restart sshd
|
||||||
|
elif [ -x /etc/init.d/sshd ]; then
|
||||||
|
/etc/init.d/sshd restart
|
||||||
|
else
|
||||||
|
echo "Restart SSH server to have changes take effect."
|
||||||
|
fi
|
Loading…
Reference in new issue