用作 cicd/ssh-action 仓库基础组件
Go to file
appleboy 1849c53ed5
test: refactor SSH integration tests with reusable config and helpers
- Refactor SSH-related integration tests to use a reusable SSHTestConfig struct and a new runSSHContainerTest helper function
- Support testing both key-based and password-based authentication by passing configuration via SSHTestConfig
- Move duplicated test setup code for containerized SSH server to the helper function
- Update assertions to check outputs against configurable expected values for each test
- Add test for password-based authentication in addition to existing sudo command test

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2025-04-27 09:31:46 +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 test: refactor SSH integration tests with reusable config and helpers 2025-04-27 09:31:46 +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.