52 lines
1.2 KiB
YAML
52 lines
1.2 KiB
YAML
name: 원격 명령어 실행
|
|
description: 원격 서버에서 명령어를 실행
|
|
|
|
inputs:
|
|
host:
|
|
required: true
|
|
port:
|
|
required: false
|
|
default: "22"
|
|
user:
|
|
required: true
|
|
key-path:
|
|
required: false
|
|
default: ""
|
|
command:
|
|
required: true
|
|
|
|
runs:
|
|
using: composite
|
|
steps:
|
|
- shell: bash
|
|
run: |
|
|
set -eu
|
|
|
|
SUDO=""
|
|
[ "$(id -u)" -ne 0 ] && SUDO="sudo"
|
|
|
|
if ! command -v ssh >/dev/null 2>&1; then
|
|
if command -v apt-get >/dev/null 2>&1; then
|
|
$SUDO apt-get update
|
|
$SUDO apt-get install -y --no-install-recommends openssh-client
|
|
else
|
|
echo "ssh가 없습니다. openssh-client를 설치한 러너가 필요합니다."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
KEY_PATH="${{ inputs.key-path }}"
|
|
if [ -z "$KEY_PATH" ]; then
|
|
KEY_PATH="$HOME/.ssh/deploy_key"
|
|
fi
|
|
case "$KEY_PATH" in
|
|
"~/"*) KEY_PATH="$HOME/${KEY_PATH#\~/}" ;;
|
|
esac
|
|
|
|
ssh -p "${{ inputs.port }}" -i "$KEY_PATH" \
|
|
-o IdentitiesOnly=yes \
|
|
"${{ inputs.user }}@${{ inputs.host }}" \
|
|
'bash -se' << 'EOF'
|
|
${{ inputs.command }}
|
|
EOF
|