Browse Source
deploy: Add deployment script for Mikrotik systems
deploy: Add deployment script for Mikrotik systems
Add a script to deploy certificates on Mikrotik/RouterOS systems. Certificate will be deployed for the `www-ssl` service and optionally the `api-ssl` service. Signed-off-by: Jimmy Thrasibule <jimmy@thrasibule.mx>pull/1870/head
1 changed files with 130 additions and 0 deletions
@ -0,0 +1,130 @@ |
|||||
|
#!/usr/bin/env sh |
||||
|
# |
||||
|
# mikrotik.sh |
||||
|
# =========== |
||||
|
# |
||||
|
# Deploy certificate to a Mikrotik RouterOS system using the SSH protocol. |
||||
|
# |
||||
|
# The script must be able to connect to the remote host without a password. |
||||
|
# Therefore only public key authentication method is available and SSH keys must |
||||
|
# have been exchanged prior to running this script. |
||||
|
# |
||||
|
# |
||||
|
# Variables |
||||
|
# --------- |
||||
|
# |
||||
|
# The following variables can be exported in order to configure the script's |
||||
|
# behavior. When not set, values previously saved in _domain.conf_ are taken. |
||||
|
# |
||||
|
# |
||||
|
# DEPLOY_MIKROTIK_SET_API |
||||
|
# : Deploy certificate also to the API-SSL service. |
||||
|
# |
||||
|
# DEPLOY_MIKROTIK_SSH_HOST |
||||
|
# : Hostname or IP address to connect to the remote host. When not provided |
||||
|
# use the domain name from the `acme.sh` command. |
||||
|
# |
||||
|
# DEPLOY_MIKROTIK_SSH_IDFILE |
||||
|
# : Selects a file from which the identity (private key) for public key |
||||
|
# authentication is read. When not provided, `ssh` default is used. |
||||
|
# |
||||
|
# DEPLOY_MIKROTIK_SSH_OPTIONS |
||||
|
# : Additional options to pass to the `ssh` process. |
||||
|
# |
||||
|
# DEPLOY_MIKROTIK_SSH_PORT |
||||
|
# : Port to connect to on the remote host. |
||||
|
# |
||||
|
# DEPLOY_MIKROTIK_SSH_USER |
||||
|
# : Specifies the user to log in as on the remote machine. When not provide |
||||
|
# use the current user name. |
||||
|
# |
||||
|
mikrotik_deploy() { |
||||
|
_cdomain="${1}" |
||||
|
_ckey="${2}" |
||||
|
_ccert="${3}" |
||||
|
_cca="${4}" |
||||
|
_cfullchain="${5}" |
||||
|
|
||||
|
_debug _cdomain "${_cdomain}" |
||||
|
_debug _ckey "${_ckey}" |
||||
|
_debug _ccert "${_ccert}" |
||||
|
_debug _cca "${_cca}" |
||||
|
_debug _cfullchain "${_cfullchain}" |
||||
|
|
||||
|
_ssh_opts="${DEPLOY_MIKROTIK_SSH_OPTIONS}" |
||||
|
if [ "${_ssh_opts}" ]; then |
||||
|
_savedomainconf DEPLOY_MIKROTIK_SSH_OPTIONS "${_ssh_opts}" |
||||
|
fi |
||||
|
|
||||
|
_ssh_host="${DEPLOY_MIKROTIK_SSH_HOST}" |
||||
|
if [ "${_ssh_host}" ]; then |
||||
|
_savedomainconf DEPLOY_MIKROTIK_SSH_HOST "${_ssh_host}" |
||||
|
else |
||||
|
_ssh_host="${_cdomain}" |
||||
|
fi |
||||
|
|
||||
|
if [ "${DEPLOY_MIKROTIK_SET_API}" = "yes" ]; then |
||||
|
_debug DEPLOY_MIKROTIK_SET_API "${DEPLOY_MIKROTIK_SET_API}" |
||||
|
_savedomainconf DEPLOY_MIKROTIK_SET_API "${DEPLOY_MIKROTIK_SET_API}" |
||||
|
fi |
||||
|
|
||||
|
if [ "${DEPLOY_MIKROTIK_SSH_IDFILE}" ]; then |
||||
|
_debug DEPLOY_MIKROTIK_SSH_IDFILE "${DEPLOY_MIKROTIK_SSH_IDFILE}" |
||||
|
|
||||
|
_ssh_opts="${_ssh_opts} -i ${DEPLOY_MIKROTIK_SSH_IDFILE}" |
||||
|
_savedomainconf DEPLOY_MIKROTIK_SSH_IDFILE "${DEPLOY_MIKROTIK_SSH_IDFILE}" |
||||
|
fi |
||||
|
|
||||
|
if [ "${DEPLOY_MIKROTIK_SSH_PORT}" ]; then |
||||
|
_debug DEPLOY_MIKROTIK_SSH_PORT "${DEPLOY_MIKROTIK_SSH_PORT}" |
||||
|
|
||||
|
_ssh_opts="${_ssh_opts} -p ${DEPLOY_MIKROTIK_SSH_PORT}" |
||||
|
_savedomainconf DEPLOY_MIKROTIK_SSH_PORT "${DEPLOY_MIKROTIK_SSH_PORT}" |
||||
|
fi |
||||
|
|
||||
|
if [ "${DEPLOY_MIKROTIK_SSH_USER}" ]; then |
||||
|
_debug DEPLOY_MIKROTIK_SSH_USER "${DEPLOY_MIKROTIK_SSH_USER}" |
||||
|
|
||||
|
_ssh_host="${DEPLOY_MIKROTIK_SSH_USER}@${_ssh_host}" |
||||
|
_savedomainconf DEPLOY_MIKROTIK_SSH_USER "${DEPLOY_MIKROTIK_SSH_USER}" |
||||
|
fi |
||||
|
|
||||
|
_scp_opts=$(echo "${_ssh_opts} -q" | sed "s/-p/-P/g") |
||||
|
_debug _ssh_host "${_ssh_host}" |
||||
|
_debug _ssh_opts "${_ssh_opts}" |
||||
|
_debug _scp_opts "${_scp_opts}" |
||||
|
|
||||
|
_ssh="ssh ${_ssh_opts} ${_ssh_host}" |
||||
|
_scp="scp ${_scp_opts}" |
||||
|
|
||||
|
_debug _ssh "${_ssh}" |
||||
|
_debug _scp "${_scp}" |
||||
|
|
||||
|
${_ssh} /system resource print |
||||
|
_ret=${?} |
||||
|
if [ ${_ret} != "0" ]; then |
||||
|
_err "Could not connect to ${_ssh_host}." |
||||
|
return ${_ret} |
||||
|
fi |
||||
|
_info "Connected successfully to ${_ssh_host}." |
||||
|
|
||||
|
_info "Cleaning out old certificate from ${_ssh_host}." |
||||
|
${_ssh} /certificate remove [find name="${_cdomain}.pem_0"] |
||||
|
${_ssh} /file remove "${_cdomain}.pem" |
||||
|
${_ssh} /file remove "${_cdomain}.key" |
||||
|
|
||||
|
_info "Uploading certificate for ${_cdomain} to ${_ssh_host}." |
||||
|
${_scp} "${_cfullchain}" "${_ssh_host}:${_cdomain}.pem" |
||||
|
${_scp} "${_ckey}" "${_ssh_host}:${_cdomain}.key" |
||||
|
|
||||
|
_info "Setting up new certificate." |
||||
|
${_ssh} /certificate import file-name="${_cdomain}.pem" passphrase=\"\" |
||||
|
${_ssh} /certificate import file-name="${_cdomain}.key" passphrase=\"\" |
||||
|
${_ssh} /file remove "${_cdomain}.pem" |
||||
|
${_ssh} /file remove "${_cdomain}.key" |
||||
|
|
||||
|
${_ssh} /ip service set www-ssl certificate="${_cdomain}.pem_0" |
||||
|
if [ "${DEPLOY_MIKROTIK_SET_API}" = "yes" ]; then |
||||
|
${_ssh} /ip service set api-ssl certificate="${_cdomain}.pem_0" |
||||
|
fi |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue