mirror of
https://github.com/aljazceru/addons.git
synced 2025-12-18 21:54:20 +01:00
Allow password / extend CLI (#151)
* Allow password / extend CLI * allow only use one variant * fix key generator
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "SSH server",
|
"name": "SSH server",
|
||||||
"version": "1.0",
|
"version": "2.0",
|
||||||
"slug": "ssh",
|
"slug": "ssh",
|
||||||
"description": "Connect to your server over SSH",
|
"description": "Connect to your server over SSH",
|
||||||
"url": "https://home-assistant.io/addons/ssh/",
|
"url": "https://home-assistant.io/addons/ssh/",
|
||||||
@@ -11,10 +11,12 @@
|
|||||||
},
|
},
|
||||||
"map": ["config:rw", "ssl:rw", "addons:rw", "share:rw", "backup:rw"],
|
"map": ["config:rw", "ssl:rw", "addons:rw", "share:rw", "backup:rw"],
|
||||||
"options": {
|
"options": {
|
||||||
"authorized_keys": [null]
|
"authorized_keys": [],
|
||||||
|
"password": ""
|
||||||
},
|
},
|
||||||
"schema": {
|
"schema": {
|
||||||
"authorized_keys": ["str"]
|
"authorized_keys": ["str"],
|
||||||
|
"password": "str"
|
||||||
},
|
},
|
||||||
"image": "homeassistant/{arch}-addon-ssh"
|
"image": "homeassistant/{arch}-addon-ssh"
|
||||||
}
|
}
|
||||||
|
|||||||
39
ssh/hassio
39
ssh/hassio
@@ -12,25 +12,23 @@ HomeAssistant:
|
|||||||
$ hassio homeassistant logs
|
$ hassio homeassistant logs
|
||||||
$ hassio homeassistant restart
|
$ hassio homeassistant restart
|
||||||
$ hassio homeassistant update
|
$ hassio homeassistant update
|
||||||
|
|
||||||
|
Host:
|
||||||
|
$ hassio host restart
|
||||||
|
$ hassio host shutdown
|
||||||
|
$ hassio host update
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
function call_api_post() {
|
function call_api() {
|
||||||
if ! api_ret="$(curl -X POST "$HASSIO_API/$1/$2")"; then
|
if ! api_ret="$(curl -s -X $1 "$HASSIO_API/$2/$3")"; then
|
||||||
echo "API error: $api_ret"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "$api_ret"
|
|
||||||
}
|
|
||||||
|
|
||||||
function call_api_get() {
|
|
||||||
if ! api_ret="$(curl "$HASSIO_API/$1/$2")"; then
|
|
||||||
echo "API error: $api_ret"
|
echo "API error: $api_ret"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "$api_ret"
|
echo "$api_ret"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
######
|
||||||
# homeassistant functions
|
# homeassistant functions
|
||||||
if [ "$1" == "homeassistant" ]; then
|
if [ "$1" == "homeassistant" ]; then
|
||||||
hass_cmd=('logs' 'restart' 'update')
|
hass_cmd=('logs' 'restart' 'update')
|
||||||
@@ -38,12 +36,23 @@ if [ "$1" == "homeassistant" ]; then
|
|||||||
echo "No homeassistant command '$2' found!"
|
echo "No homeassistant command '$2' found!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# logs
|
# logs
|
||||||
if [ "$2" == "logs" ]; then
|
if [ "$2" == "logs" ]; then
|
||||||
call_api_get "$1" "$2"
|
call_api GET "$1" "$2"
|
||||||
exit 0
|
else
|
||||||
|
call_api POST "$1" "$2"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
call_api_post "$1" "$2"
|
|
||||||
|
######
|
||||||
|
# host functions
|
||||||
|
if [ "$1" == "host" ]; then
|
||||||
|
hass_cmd=('restart' 'shutdown' 'update')
|
||||||
|
if [[ ! ${hass_cmd[*]} =~ $2 ]]; then
|
||||||
|
echo "No host command '$2' found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
call_api POST "$1" "$2"
|
||||||
fi
|
fi
|
||||||
|
|||||||
31
ssh/run.sh
31
ssh/run.sh
@@ -5,25 +5,42 @@ CONFIG_PATH=/data/options.json
|
|||||||
KEYS_PATH=/data/host_keys
|
KEYS_PATH=/data/host_keys
|
||||||
|
|
||||||
AUTHORIZED_KEYS=$(jq --raw-output ".authorized_keys[]" $CONFIG_PATH)
|
AUTHORIZED_KEYS=$(jq --raw-output ".authorized_keys[]" $CONFIG_PATH)
|
||||||
|
PASSWORD=$(jq --raw-output ".password" $CONFIG_PATH)
|
||||||
|
|
||||||
# Init defaults config
|
# Init defaults config
|
||||||
sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config
|
sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config
|
||||||
sed -i s/#PasswordAuthentication.*/PasswordAuthentication\ no/ /etc/ssh/sshd_config
|
|
||||||
sed -i s/#LogLevel.*/LogLevel\ DEBUG/ /etc/ssh/sshd_config
|
sed -i s/#LogLevel.*/LogLevel\ DEBUG/ /etc/ssh/sshd_config
|
||||||
|
|
||||||
# Generate authorized_keys file
|
if [ ! -z "$AUTHORIZED_KEYS" ]; then
|
||||||
mkdir -p ~/.ssh
|
echo "[INFO] Setup authorized_keys"
|
||||||
while read -r line; do
|
|
||||||
echo "$line" >> ~/.ssh/authorized_keys
|
mkdir -p ~/.ssh
|
||||||
done <<< "$AUTHORIZED_KEYS"
|
while read -r line; do
|
||||||
chmod 600 ~/.ssh/authorized_keys
|
echo "$line" >> ~/.ssh/authorized_keys
|
||||||
|
done <<< "$AUTHORIZED_KEYS"
|
||||||
|
|
||||||
|
chmod 600 ~/.ssh/authorized_keys
|
||||||
|
sed -i s/#PasswordAuthentication.*/PasswordAuthentication\ no/ /etc/ssh/sshd_config
|
||||||
|
elif [ ! -z "$PASSWORD" ]; then
|
||||||
|
echo "[INFO] Setup password login"
|
||||||
|
|
||||||
|
echo "root:$PASSWORD" | chpasswd 2&> /dev/null
|
||||||
|
sed -i s/#PasswordAuthentication.*/PasswordAuthentication\ yes/ /etc/ssh/sshd_config
|
||||||
|
sed -i s/#PermitEmptyPasswords.*/PermitEmptyPasswords\ no/ /etc/ssh/sshd_config
|
||||||
|
else
|
||||||
|
echo "[Error] You need setup a login!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Generate host keys
|
# Generate host keys
|
||||||
if [ ! -d "$KEYS_PATH" ]; then
|
if [ ! -d "$KEYS_PATH" ]; then
|
||||||
|
echo "[INFO] Create host keys"
|
||||||
|
|
||||||
mkdir -p "$KEYS_PATH"
|
mkdir -p "$KEYS_PATH"
|
||||||
ssh-keygen -A
|
ssh-keygen -A
|
||||||
cp -fp /etc/ssh/ssh_host* "$KEYS_PATH/"
|
cp -fp /etc/ssh/ssh_host* "$KEYS_PATH/"
|
||||||
else
|
else
|
||||||
|
echo "[INFO] Restore host keys"
|
||||||
cp -fp "$KEYS_PATH"/* /etc/ssh/
|
cp -fp "$KEYS_PATH"/* /etc/ssh/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user