committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 134 additions and 0 deletions
-
134deploy/sftp.sh
@ -0,0 +1,134 @@ |
|||
#!/usr/bin/env sh |
|||
|
|||
# Script to deploy certificates to remote server by SFTP |
|||
# Note that SFTP must be able to login to remote host without a password... |
|||
# SSH Keys must have been exchanged with the remote host. Validate and |
|||
# test that you can login to USER@SERVER from the host running acme.sh before |
|||
# using this script. |
|||
# |
|||
# The following variables exported from environment will be used. |
|||
# If not set then values previously saved in <domain>.conf file are used. |
|||
# |
|||
# Only a host is required. All others are optional. |
|||
# |
|||
# export DEPLOY_SFTP_HOSTS="192.168.0.1:22 admin@ssh.server.somewhere localhost" # required, multiple hosts allowed |
|||
# export DEPLOY_SFTP_KEYFILE="/etc/stunnel/stunnel.pem" # defaults to ~/acme_sftp_deploy/<domain>/<domain>.key |
|||
# export DEPLOY_SFTP_CERTFILE="/etc/stunnel/stunnel.pem" ~/acme_sftp_deploy/<domain>/<domain>.cer |
|||
# export DEPLOY_SFTP_CAFILE="/etc/stunnel/uca.pem" ~/acme_sftp_deploy/<domain>/ca.cer |
|||
# export DEPLOY_SFTP_FULLCHAIN="" ~/acme_sftp_deploy/<domain>/fullchain.cer |
|||
|
|||
######## Public functions ##################### |
|||
|
|||
#domain keyfile certfile cafile fullchain |
|||
sftp_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" |
|||
|
|||
# HOSTS is required to login by sftp to remote host. |
|||
_getdeployconf DEPLOY_SFTP_HOSTS |
|||
_debug2 DEPLOY_SFTP_HOSTS "$DEPLOY_SFTP_HOSTS" |
|||
if [ -z "$DEPLOY_SFTP_HOSTS" ]; then |
|||
_err "DEPLOY_SFTP_HOSTS not defined." |
|||
return 1 |
|||
fi |
|||
_savedeployconf DEPLOY_SFTP_HOSTS "$DEPLOY_SFTP_HOSTS" |
|||
|
|||
# KEYFILE is optional. |
|||
# If provided then private key will be copied to provided filename. |
|||
_getdeployconf DEPLOY_SFTP_KEYFILE |
|||
_debug2 DEPLOY_SFTP_KEYFILE "$DEPLOY_SFTP_KEYFILE" |
|||
if [ -n "$DEPLOY_SFTP_KEYFILE" ]; then |
|||
_savedeployconf DEPLOY_SFTP_KEYFILE "$DEPLOY_SFTP_KEYFILE" |
|||
fi |
|||
|
|||
# CERTFILE is optional. |
|||
# If provided then certificate will be copied or appended to provided filename. |
|||
_getdeployconf DEPLOY_SFTP_CERTFILE |
|||
_debug2 DEPLOY_SFTP_CERTFILE "$DEPLOY_SFTP_CERTFILE" |
|||
if [ -n "$DEPLOY_SFTP_CERTFILE" ]; then |
|||
_savedeployconf DEPLOY_SFTP_CERTFILE "$DEPLOY_SFTP_CERTFILE" |
|||
fi |
|||
|
|||
# CAFILE is optional. |
|||
# If provided then CA intermediate certificate will be copied or appended to provided filename. |
|||
_getdeployconf DEPLOY_SFTP_CAFILE |
|||
_debug2 DEPLOY_SFTP_CAFILE "$DEPLOY_SFTP_CAFILE" |
|||
if [ -n "$DEPLOY_SFTP_CAFILE" ]; then |
|||
_savedeployconf DEPLOY_SFTP_CAFILE "$DEPLOY_SFTP_CAFILE" |
|||
fi |
|||
|
|||
# FULLCHAIN is optional. |
|||
# If provided then fullchain certificate will be copied or appended to provided filename. |
|||
_getdeployconf DEPLOY_SFTP_FULLCHAIN |
|||
_debug2 DEPLOY_SFTP_FULLCHAIN "$DEPLOY_SFTP_FULLCHAIN" |
|||
if [ -n "$DEPLOY_SFTP_FULLCHAIN" ]; then |
|||
_savedeployconf DEPLOY_SFTP_FULLCHAIN "$DEPLOY_SFTP_FULLCHAIN" |
|||
fi |
|||
|
|||
# Remote key file location, default ~/acme_sftp_deploy/domain/domain.key |
|||
_ckey_path=".acme_sftp_deploy/$_cdomain/$_cdomain.key" |
|||
if [ -n "$DEPLOY_SFTP_KEYFILE" ]; then |
|||
_ckey_path="$DEPLOY_SFTP_KEYFILE" |
|||
fi |
|||
_debug _ckey_path "$_ckey_path" |
|||
|
|||
# Remote cert file location, default ~/acme_sftp_deploy/domain/domain.cer |
|||
_ccert_path=".acme_sftp_deploy/$_cdomain/$_cdomain.cer" |
|||
if [ -n "$DEPLOY_SFTP_CERTFILE" ]; then |
|||
_ccert_path="$DEPLOY_SFTP_CERTFILE" |
|||
fi |
|||
_debug _ccert_path "$_ccert_path" |
|||
|
|||
# Remote intermediate CA file location, default ~/acme_sftp_deploy/domain/ca.cer |
|||
_cca_path=".acme_sftp_deploy/$_cdomain/ca.cer" |
|||
if [ -n "$DEPLOY_SFTP_CAFILE" ]; then |
|||
_cca_path="$DEPLOY_SFTP_CAFILE" |
|||
fi |
|||
_debug _cca_path "$_cca_path" |
|||
|
|||
# Remote key file location, default ~/acme_sftp_deploy/domain/fullchain.cer |
|||
_cfullchain_path=".acme_sftp_deploy/$_cdomain/fullchain.cer" |
|||
if [ -n "$DEPLOY_SFTP_FULLCHAIN" ]; then |
|||
_cfullchain_path="$DEPLOY_SFTP_FULLCHAIN" |
|||
fi |
|||
_debug _cfullchain_path "$_cfullchain_path" |
|||
|
|||
# Remote host, required non-empty but already checked before |
|||
_sftp_hosts=$DEPLOY_SFTP_HOSTS |
|||
_debug _sftp_hosts "$_sftp_hosts" |
|||
|
|||
# Initialize return value at 0 |
|||
_error_code=0 |
|||
|
|||
# Always loop at least once |
|||
for _sftp_host in $_sftp_hosts ; do |
|||
sftp "$_sftp_host"\ |
|||
<<EOF |
|||
put "$_ckey" "$_ckey_path" |
|||
put "$_ccert" "$_ccert_path" |
|||
put "$_cca" "$_cca_path" |
|||
put "$_cfullchain" "$_cfullchain_path" |
|||
EOF |
|||
_sftp_error="$?" |
|||
|
|||
# Print error code in case of error |
|||
if [ "$_sftp_error" -ne 0 ]; then |
|||
_err "Error code $_sftp_error returned from sftp at host $_sftp_host" |
|||
fi |
|||
|
|||
# Update global return value |
|||
_error_code=$((_error_code || _sftp_error)) |
|||
done |
|||
|
|||
# Return 1 if any upload failed |
|||
return "$_error_code" |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue