14 Commits

Author SHA1 Message Date
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
9085f3ea5b chore: update default timeout to 10 minutes
Some checks failed
remote ssh command / Build (push) Failing after 5s
2019-11-30 23:01:49 +08:00
696aab4627 fix typos in README.md (#12)
fix typos in README.md
2019-11-23 12:12:53 +08:00
a88f6f2013 fix typos in README.md 2019-11-21 15:53:08 +01:00
6f091cd9e3 chore(ssh): remove comma splitting
Some checks failed
remote ssh command / Build (push) Failing after 4s
fix https://github.com/appleboy/ssh-action/issues/10
2019-11-21 11:10:52 +08:00
aa1ecdd19a update doc
Some checks failed
remote ssh command / Build (push) Failing after 3s
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-09-30 16:55:40 +08:00
bffdd4e1f4 chore(ssh): set default port as 22
fix: https://github.com/appleboy/ssh-action/issues/5

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-09-30 16:54:44 +08:00
f4890bec77 update action link
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2019-09-30 11:35:28 +08:00
9aaf218321 docs: update readme 2019-09-29 14:16:47 +08:00
4 changed files with 202 additions and 55 deletions

View File

@ -43,7 +43,9 @@ jobs:
# key: ${{ secrets.KEY }}
# port: ${{ secrets.PORT }}
# script_stop: true
# script: "mkdir abc/def,ls -al"
# script: |
# mkdir abc/def
# ls -al
- name: pass environment
uses: appleboy/ssh-action@master
@ -56,5 +58,32 @@ jobs:
port: ${{ secrets.PORT }}
envs: FOO
script: |
echo "I am $FOO"
echo "I am $BAR"
echo "I am $FOO, thanks"
echo "I am $BAR, thanks"
- name: pass multiple environment
uses: appleboy/ssh-action@master
env:
FOO: "BAR"
BAR: "FOO"
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
envs: FOO,BAR
script: |
echo "I am $FOO, thanks"
echo "I am $BAR, thanks"
- name: ssh key passphrase
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH2 }}
port: ${{ secrets.PORT }}
passphrase: ${{ secrets.PASSPHRASE }}
script: |
whoami
ls -al

View File

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

129
README.md
View File

@ -1,6 +1,6 @@
# 🚀 SSH for GitHub Actions
[GitHub Action](https://developer.github.com/actions/) for executing remote ssh commands.
[GitHub Action](https://github.com/features/actions) for executing remote ssh commands.
![ssh workflow](./images/ssh-workflow.png)
@ -11,7 +11,15 @@
Executing remote ssh commands.
```yaml
- name: executing remote ssh commands using password
name: remote ssh command
on: [push]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
@ -28,21 +36,22 @@ output:
whoami
======END======
out: ***
==========================================
Successfully executed commands to all host.
==========================================
==============================================
Successfully executed commands to all host.
==============================================
```
## Input variables
see the [action.yml](./action.yml) file for more detail imformation.
See [action.yml](./action.yml) for more detailed information.
* host - scp remote host
* port - scp remote port
* username - scp username
* password - scp password
* host - remote host
* port - remote port, default is `22`
* username - ssh username
* password - ssh password
* passphrase - the passphrase is usually to encrypt the private key
* timeout - timeout for ssh to remote host, default is `30s`
* command_timeout - timeout for scp command, default is `1m`
* command_timeout - timeout for ssh command, default is `10m`
* key - content of ssh private key. ex raw content of ~/.ssh/id_rsa
* key_path - path of ssh private key
* script - execute commands
@ -50,6 +59,17 @@ see the [action.yml](./action.yml) file for more detail imformation.
* envs - pass environment variable to shell script
* debug - enable debug mode
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
### Example
Executing remote ssh commands using password.
@ -98,6 +118,7 @@ Multiple Commands
Multiple Hosts
```diff
- name: multiple host
uses: appleboy/ssh-action@master
with:
- host: "foo.com"
@ -113,15 +134,17 @@ Multiple Hosts
Pass environment variable to shell script
```diff
- name: pass environment
uses: appleboy/ssh-action@master
+ env:
+ FOO: "BAR"
+ BAR: "FOO"
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
+ envs: FOO
+ envs: FOO,BAR
script: |
echo "I am $FOO"
echo "I am $BAR"
@ -129,14 +152,88 @@ Pass environment variable to shell script
Stop script after first failure. ex: missing `abc` folder
```yaml
- name: stop script if command error
```diff
- name: stop script if command error
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
script_stop: true
script: "mkdir abc/def,ls -al"
+ script_stop: true
script: |
mkdir abc/def
ls -al
```
output:
```sh
======CMD======
mkdir abc/def
ls -al
======END======
2019/11/21 01:16:21 Process exited with status 1
err: mkdir: cannot create directory abc/def: No such file or directory
##[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

@ -6,6 +6,9 @@ inputs:
description: 'ssh remote host'
port:
description: 'ssh remote port'
default: 22
passphrase:
description: 'ssh key passphrase'
username:
description: 'ssh username'
password:
@ -15,11 +18,29 @@ inputs:
default: "30s"
command_timeout:
description: 'timeout for ssh command'
default: "1m"
default: "10m"
key:
description: 'content of ssh private key. ex raw content of ~/.ssh/id_rsa'
key_path:
description: 'path of ssh private key'
proxy_host:
description: 'ssh proxy remote host'
proxy_port:
description: 'ssh proxy remote 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'
script:
description: 'execute commands'
script_stop: