用作 cicd/ssh-action 仓库基础组件
Go to file
appleboy 4a649cfe45
refactor: refactor SSH authentication handling with switch statement
- Refactor if-else logic to a switch statement for handling SSH authentication methods

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2025-04-27 09:46:02 +08:00
.github ci: update GitHub actions and improve project configurations 2025-03-29 09:35:49 +08:00
docker build: optimize and upgrade dependencies for improved performance 2025-04-11 23:43:22 +08:00
images docs: update logo path 2019-03-04 14:28:19 +08:00
tests chore: update sudoers file for improved security and permissions management 2024-01-07 17:21:59 +08:00
.dockerignore build: improve efficiency and release process with optimizations 2025-04-11 23:43:50 +08:00
.gitignore chore: improve performance and update dependencies 2023-06-04 16:44:10 +08:00
.golangci.yaml chore: update and streamline linting configuration and error formatting 2025-03-29 09:39:55 +08:00
.goreleaser.yaml chore: refine Changelog Generation Process 2024-04-19 10:27:48 +08:00
.hadolint.yaml chore: add default user for enhanced security (#267) 2023-12-26 13:29:22 +08:00
DOCS.md chore: allows to specify IP protocol (#261) 2023-06-23 16:45:44 +08:00
go.mod chore: upgrade core dependencies to latest supported versions 2025-04-26 23:10:13 +08:00
go.sum chore: upgrade core dependencies to latest supported versions 2025-04-26 23:10:13 +08:00
LICENSE refactor: remove unnecessary files. 2017-01-23 09:24:28 +08:00
main.go chore: implement debug functionality with godump integration 2025-03-09 21:42:02 +08:00
Makefile chore(protocol): improve IPv6 address. (#268) 2024-01-21 09:27:49 +08:00
plugin_test.go refactor: refactor SSH authentication handling with switch statement 2025-04-27 09:46:02 +08:00
plugin.go chore: update and streamline linting configuration and error formatting 2025-03-29 09:39:55 +08:00
README.md docs: add Table of Contents to all language README files 2025-04-26 22:00:28 +08:00
README.zh-cn.md docs: add Table of Contents to all language README files 2025-04-26 22:00:28 +08:00
README.zh-tw.md docs: add Table of Contents to all language README files 2025-04-26 22:00:28 +08:00

drone-ssh

English | 繁體中文 | 简体中文

sshlog

GitHub tag GoDoc Lint and Testing codecov Go Report Card Docker Pulls

A Drone plugin for executing commands on remote hosts via SSH. For usage instructions and a list of available options, please refer to the documentation.

Note: Please update your Drone image config path to appleboy/drone-ssh. The plugins/ssh image is no longer maintained.

demo

Table of Contents

Breaking Changes

As of v1.5.0, the command timeout flag has changed to use the Duration format. See the following example:

pipeline:
  scp:
    image: ghcr.io/appleboy/drone-ssh
    settings:
      host:
        - example1.com
        - example2.com
      username: ubuntu
      password:
        from_secret: ssh_password
      port: 22
-     command_timeout: 120
+     command_timeout: 2m
      script:
        - echo "Hello World"

Build or Download a Binary

Pre-compiled binaries are available on the releases page, supporting the following operating systems:

  • Windows amd64/386
  • Linux arm/amd64/386
  • macOS (Darwin) amd64/386

If you have Go installed:

go install github.com/appleboy/drone-ssh@latest

Or build the binary manually with the following commands:

export GOOS=linux
export GOARCH=amd64
export CGO_ENABLED=0
export GO111MODULE=on

go test -cover ./...

go build -v -a -tags netgo -o release/linux/amd64/drone-ssh .

Docker

Build the Docker image with the following command:

make docker

Usage

Run from your working directory:

docker run --rm \
  -e PLUGIN_HOST=foo.com \
  -e PLUGIN_USERNAME=root \
  -e PLUGIN_KEY="$(cat ${HOME}/.ssh/id_rsa)" \
  -e PLUGIN_SCRIPT=whoami \
  -v $(pwd):$(pwd) \
  -w $(pwd) \
  ghcr.io/appleboy/drone-ssh

Mount Key from File Path

Make sure to enable trusted mode in your project settings (for Drone 0.8 version).

trusted mode

Mount the private key in the volumes section of your .drone.yml config:

pipeline:
  ssh:
    image: ghcr.io/appleboy/drone-ssh
    host: xxxxx.com
    username: deploy
+   volumes:
+     - /root/drone_rsa:/root/ssh/drone_rsa
    key_path: /root/ssh/drone_rsa
    script:
      - echo "test ssh"

See details in this issue comment.

Configuration

See DOCS.md for examples and full configuration options.

Configuration options are loaded from multiple sources:

  1. Hardcoded drone-ssh defaults. See main.go CLI Flags for more information.
  2. From a dotenv file at a path specified by the PLUGIN_ENV_FILE environment variable.
  3. From your .drone.yml Drone configuration.

Later sources override earlier ones. For example, if PORT is set in an .env file committed in the repository or created by previous test steps, it will override the default set in main.go.