ssh: Add web terminal, alpine 3.11, improved token handling, bump 8.0 (#954)

* ssh: Add support for a web-based terminal via Ingress

* ssh: Upgrade Alpine Linux to 3.11

* ssh: Improve Hass.io API token handling

* ssh: Bump to 8.0, updated changelog

* ssh: Fix Shellcheck warning

* ssh: Use default Ingress port

* ssh: Persist .ssh folder

* ssh: Add some helper symlinks to use folder

* ssh: Make sure web terminal starts in home folder

* ssh: Update changelog to reflect latest changes
This commit is contained in:
Franck Nijhof
2019-12-29 22:21:07 +01:00
committed by Pascal Vizeli
parent 756cffa711
commit f8ee1aed33
8 changed files with 164 additions and 26 deletions

View File

@@ -3,6 +3,8 @@ set -e
KEYS_PATH=/data/host_keys
WAIT_PIDS=()
bashio::log.info "Initializing add-on for use..."
if bashio::config.has_value 'authorized_keys'; then
bashio::log.info "Setup authorized_keys"
@@ -47,16 +49,57 @@ touch /data/.bash_history
chmod 600 /data/.bash_history
ln -s -f /data/.bash_history /root/.bash_history
# Persist .bash_profile by redirecting .bash_profile to /data
# Make Hass.io TOKEN available on the CLI
echo "export HASSIO_TOKEN=${HASSIO_TOKEN}" >> /etc/profile.d/hassio.sh
# Remove old HASSIO_TOKEN from bash profile (if exists)
if bashio::fs.file_exists /data/.bash_profile; then
sed -i "s/export HASSIO_TOKEN=.*/export HASSIO_TOKEN=${HASSIO_TOKEN}/" /data/.bash_profile
else
echo "export HASSIO_TOKEN=${HASSIO_TOKEN}" > /data/.bash_profile
sed -i "/export HASSIO_TOKEN=.*/d" /data/.bash_profile
fi
# Persist .bash_profile by redirecting .bash_profile to /data
chmod 600 /data/.bash_profile
ln -s -f /data/.bash_profile /root/.bash_profile
# Start server
# Links some common directories to the user's home folder for convenience
DIRECTORIES=(addons backup config share ssl)
for dir in "${DIRECTORIES[@]}"; do
ln -s "/${dir}" "${HOME}/${dir}" \
|| bashio::log.warning "Failed linking common directory: ${dir}"
done
# Sets up the users .ssh folder to be persistent
if ! bashio::fs.directory_exists /data/.ssh; then
mkdir -p /data/.ssh \
|| bashio::exit.nok 'Failed to create a persistent .ssh folder'
chmod 700 /data/.ssh \
|| bashio::exit.nok \
'Failed setting permissions on persistent .ssh folder'
fi
ln -s /data/.ssh /root/.ssh
# Register stop
function stop_addon() {
bashio::log.debug "Kill Processes..."
kill -15 "${WAIT_PIDS[@]}"
wait "${WAIT_PIDS[@]}"
bashio::log.debug "Done."
}
trap "stop_addon" SIGTERM SIGHUP
# Start SSH server
bashio::log.info "Starting SSH daemon..."
exec /usr/sbin/sshd -D -e < /dev/null
/usr/sbin/sshd -D -e < /dev/null &
WAIT_PIDS+=($!)
# Start ttyd server
bashio::log.info "Starting Web Terminal..."
cd /root
ttyd -p 8099 tmux -u new -A -s hassio bash -l &
WAIT_PIDS+=($!)
# Wait until all is done
bashio::log.info "SSH add-on is set up and running!"
wait "${WAIT_PIDS[@]}"