23 Commits

Author SHA1 Message Date
e2cbea5f00 chore: bump drone-ssh to v1.6.1 (#63)
Some checks failed
remote ssh command / Build (push) Failing after 4s
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2020-06-15 16:45:26 +08:00
5711a203b3 fix typo 2020-06-05 09:05:02 +08:00
b315fb5f98 Update README.md 2020-06-05 09:03:15 +08:00
682eb0ddda chore: bump drone-ssh to v1.6.0
Some checks failed
remote ssh command / Build (push) Failing after 4s
2020-05-24 13:59:21 +08:00
03b440e441 docs: add cipher parameter 2020-05-24 13:13:09 +08:00
1cb5cd31c9 chore: update to latest version 2020-05-24 12:09:05 +08:00
c9eebc1cde chore: support use_insecure_cipher (#57)
Some checks failed
remote ssh command / Build (push) Failing after 3s
2020-05-24 10:54:31 +08:00
6b00175bad add support for fingerprint: (#54) 2020-05-19 14:21:26 +08:00
a912e225ec chore: Add limitation in readme 2020-05-08 19:05:53 +08:00
ad6643f705 chore: support ciphers
Some checks failed
remote ssh command / Build (push) Failing after 11s
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2020-04-30 15:56:29 +08:00
26dd2b3a38 chore: upgrade drone-ssh to 1.5.6
Some checks failed
remote ssh command / Build (push) Failing after 6s
2020-04-16 22:24:18 +08:00
122f35dca5 chore: improve ci workflow (#34) 2020-02-13 21:20:15 +08:00
03b5d10ad6 docs: update desctiption 2020-02-13 21:17:09 +08:00
fcfb760891 docs: add GitHub syntax (#30)
see: https://help.github.com/en/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions

fixed: https://github.com/appleboy/ssh-action/issues/28
2020-02-09 11:37:56 +08:00
fd81fae289 chore: echo sha string 2020-02-09 11:29:31 +08:00
242a8e2e57 chore: Add Contexts and expression example 2020-02-09 11:25:59 +08:00
cfe9c45db6 docs: sync parameter (#25) 2020-01-30 22:40:33 +08:00
73767290ca docs: add passphrase example
Some checks failed
remote ssh command / Build (push) Failing after 4s
2019-12-30 19:54:28 +08:00
e5c07fceef support passphrase (#18)
* support passphrase

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-12-30 19:50:55 +08:00
d690bdebf8 docs: update multiple env example 2019-12-08 07:16:30 +08:00
f478af9b34 docs: pass multiple environment 2019-12-07 20:19:23 +08:00
d520c19f4f docs: support proxy command (#15)
docs: support proxy command
2019-12-07 20:15:58 +08:00
0dee98b334 docs: support proxy command 2019-12-07 20:05:02 +08:00
4 changed files with 190 additions and 12 deletions

View File

@ -6,8 +6,11 @@ jobs:
name: Build name: Build
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: checkout
uses: actions/checkout@v1
- name: executing remote ssh commands using password - name: executing remote ssh commands using password
uses: appleboy/ssh-action@master uses: ./
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@ -16,7 +19,7 @@ jobs:
script: whoami script: whoami
- name: executing remote ssh commands using ssh key - name: executing remote ssh commands using ssh key
uses: appleboy/ssh-action@master uses: ./
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@ -25,7 +28,7 @@ jobs:
script: whoami script: whoami
- name: multiple command - name: multiple command
uses: appleboy/ssh-action@master uses: ./
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@ -36,7 +39,7 @@ jobs:
ls -al ls -al
# - name: stop script if command error # - name: stop script if command error
# uses: appleboy/ssh-action@master # uses: ./
# with: # with:
# host: ${{ secrets.HOST }} # host: ${{ secrets.HOST }}
# username: ${{ secrets.USERNAME }} # username: ${{ secrets.USERNAME }}
@ -48,7 +51,7 @@ jobs:
# ls -al # ls -al
- name: pass environment - name: pass environment
uses: appleboy/ssh-action@master uses: ./
env: env:
FOO: "BAR" FOO: "BAR"
with: with:
@ -60,3 +63,42 @@ jobs:
script: | script: |
echo "I am $FOO, thanks" echo "I am $FOO, thanks"
echo "I am $BAR, thanks" echo "I am $BAR, thanks"
- name: pass multiple environment
uses: ./
env:
FOO: "BAR"
BAR: "FOO"
SHA: ${{ github.sha }}
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
envs: FOO,BAR,SHA
script: |
echo "I am $FOO, thanks"
echo "I am $BAR, thanks"
echo "sha: $SHA"
- name: ssh key passphrase
uses: ./
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH2 }}
port: ${{ secrets.PORT }}
passphrase: ${{ secrets.PASSPHRASE }}
script: |
whoami
ls -al
- name: use insecure cipher
uses: ./
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
script: whoami
use_insecure_cipher: true

View File

@ -1,4 +1,4 @@
FROM appleboy/drone-ssh:1.5.4-linux-amd64 FROM appleboy/drone-ssh:1.6.1-linux-amd64
ADD entrypoint.sh /entrypoint.sh ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh RUN chmod +x /entrypoint.sh

105
README.md
View File

@ -6,6 +6,8 @@
[![Actions Status](https://github.com/appleboy/ssh-action/workflows/remote%20ssh%20command/badge.svg)](https://github.com/appleboy/ssh-action/actions) [![Actions Status](https://github.com/appleboy/ssh-action/workflows/remote%20ssh%20command/badge.svg)](https://github.com/appleboy/ssh-action/actions)
**Important**: Only support **Linux** [docker](https://www.docker.com/) container.
## Usage ## Usage
Executing remote ssh commands. Executing remote ssh commands.
@ -45,18 +47,37 @@ out: ***
See [action.yml](./action.yml) for more detailed information. See [action.yml](./action.yml) for more detailed information.
* host - remote host * host - ssh host
* port - remote port, default is `22` * port - ssh port, default is `22`
* username - ssh username * username - ssh username
* password - ssh password * password - ssh password
* passphrase - the passphrase is usually to encrypt the private key
* sync - synchronous execution if multiple hosts, default is false
* timeout - timeout for ssh to remote host, default is `30s` * timeout - timeout for ssh to remote host, default is `30s`
* command_timeout - timeout for ssh command, default is `10m` * command_timeout - timeout for ssh command, default is `10m`
* key - content of ssh private key. ex raw content of ~/.ssh/id_rsa * key - content of ssh private key. ex raw content of ~/.ssh/id_rsa
* key_path - path of ssh private key * key_path - path of ssh private key
* fingerprint - fingerprint SHA256 of the host public key, default is to skip verification
* script - execute commands * script - execute commands
* script_stop - stop script after first failure * script_stop - stop script after first failure
* envs - pass environment variable to shell script * envs - pass environment variable to shell script
* debug - enable debug mode * debug - enable debug mode
* use_insecure_cipher - include more ciphers with use_insecure_cipher (see [#56](https://github.com/appleboy/ssh-action/issues/56))
* cipher - the allowed cipher algorithms. If unspecified then a sensible
SSH Proxy Setting:
* proxy_host - proxy host
* proxy_port - proxy port, default is `22`
* proxy_username - proxy username
* proxy_password - proxy password
* proxy_passphrase - the passphrase is usually to encrypt the private key
* proxy_timeout - timeout for ssh to proxy host, default is `30s`
* proxy_key - content of ssh proxy private key.
* proxy_key_path - path of ssh proxy private key
* proxy_fingerprint - fingerprint SHA256 of the proxy host public key, default is to skip verification
* proxy_use_insecure_cipher - include more ciphers with use_insecure_cipher (see [#56](https://github.com/appleboy/ssh-action/issues/56))
* proxy_cipher - the allowed cipher algorithms. If unspecified then a sensible
### Example ### Example
@ -119,6 +140,22 @@ Multiple Hosts
ls -al ls -al
``` ```
Synchronous execution on multiple hosts
```diff
- name: multiple host
uses: appleboy/ssh-action@master
with:
host: "foo.com,bar.com"
+ sync: true
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
script: |
whoami
ls -al
```
Pass environment variable to shell script Pass environment variable to shell script
```diff ```diff
@ -126,15 +163,18 @@ Pass environment variable to shell script
uses: appleboy/ssh-action@master uses: appleboy/ssh-action@master
+ env: + env:
+ FOO: "BAR" + FOO: "BAR"
+ BAR: "FOO"
+ SHA: ${{ github.sha }}
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }} key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }} port: ${{ secrets.PORT }}
+ envs: FOO + envs: FOO,BAR
script: | script: |
echo "I am $FOO" echo "I am $FOO"
echo "I am $BAR" echo "I am $BAR"
echo "sha: $SHA"
``` ```
Stop script after first failure. ex: missing `abc` folder Stop script after first failure. ex: missing `abc` folder
@ -165,3 +205,62 @@ ls -al
err: mkdir: cannot create directory abc/def: No such file or directory err: mkdir: cannot create directory abc/def: No such file or directory
##[error]Docker run failed with exit code 1 ##[error]Docker run failed with exit code 1
``` ```
How to connect remote server using `ProxyCommand`?
```bash
+--------+ +----------+ +-----------+
| Laptop | <--> | Jumphost | <--> | FooServer |
+--------+ +----------+ +-----------+
```
in your `~/.ssh/config`, you will see the following.
```bash
Host Jumphost
HostName Jumphost
User ubuntu
Port 22
IdentityFile ~/.ssh/keys/jump_host.pem
Host FooServer
HostName FooServer
User ubuntu
Port 22
ProxyCommand ssh -q -W %h:%p Jumphost
```
How to convert to YAML format of GitHubActions.
```diff
- name: ssh proxy command
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
+ proxy_host: ${{ secrets.PROXY_HOST }}
+ proxy_username: ${{ secrets.PROXY_USERNAME }}
+ proxy_key: ${{ secrets.PROXY_KEY }}
+ proxy_port: ${{ secrets.PROXY_PORT }}
script: |
mkdir abc/def
ls -al
```
Protecting a Private Key. The purpose of the passphrase is usually to encrypt the private key. This makes the key file by itself useless to an attacker. It is not uncommon for files to leak from backups or decommissioned hardware, and hackers commonly exfiltrate files from compromised systems.
```diff
- name: ssh key passphrase
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
+ passphrase: ${{ secrets.PASSPHRASE }}
script: |
whoami
ls -al
```

View File

@ -3,16 +3,26 @@ description: 'Executing remote ssh commands'
author: 'Bo-Yi Wu' author: 'Bo-Yi Wu'
inputs: inputs:
host: host:
description: 'ssh remote host' description: 'ssh host'
port: port:
description: 'ssh remote port' description: 'ssh port'
default: 22 default: 22
passphrase:
description: 'ssh key passphrase'
username: username:
description: 'ssh username' description: 'ssh username'
password: password:
description: 'ssh password' description: 'ssh password'
sync:
description: 'synchronous execution if multiple hosts'
default: false
use_insecure_cipher:
description: 'include more ciphers with use_insecure_cipher'
default: false
cipher:
description: 'the allowed cipher algorithms. If unspecified then a sensible'
timeout: timeout:
description: 'timeout for ssh to remote host' description: 'timeout for ssh to host'
default: "30s" default: "30s"
command_timeout: command_timeout:
description: 'timeout for ssh command' description: 'timeout for ssh command'
@ -21,6 +31,33 @@ inputs:
description: 'content of ssh private key. ex raw content of ~/.ssh/id_rsa' description: 'content of ssh private key. ex raw content of ~/.ssh/id_rsa'
key_path: key_path:
description: 'path of ssh private key' description: 'path of ssh private key'
fingerprint:
description: 'sha256 fingerprint of the host public key'
proxy_host:
description: 'ssh proxy host'
proxy_port:
description: 'ssh proxy port'
default: 22
proxy_username:
description: 'ssh proxy username'
proxy_password:
description: 'ssh proxy password'
proxy_passphrase:
description: 'ssh proxy key passphrase'
proxy_timeout:
description: 'timeout for ssh to proxy host'
default: "30s"
proxy_key:
description: 'content of ssh proxy private key. ex raw content of ~/.ssh/id_rsa'
proxy_key_path:
description: 'path of ssh proxy private key'
proxy_fingerprint:
description: 'sha256 fingerprint of the proxy host public key'
proxy_cipher:
description: 'the allowed cipher algorithms. If unspecified then a sensible'
proxy_use_insecure_cipher:
description: 'include more ciphers with use_insecure_cipher'
default: false
script: script:
description: 'execute commands' description: 'execute commands'
script_stop: script_stop: