5.1 KiB
Install SSH Key
This action installs SSH key in ~/.ssh
.
Useful for SCP, SFTP, and rsync
over SSH in deployment script.
Works on all virtual environment -- Windows, macOS, Ubuntu and Ubuntu 16.04.
Usage
Add your SSH key to your product secrets by clicking Settings
- Secrets
- Add a new secret
beforehand.
NOTE: OPENSSH format (key begins with -----BEGIN OPENSSH PRIVATE KEY-----
) may not work due to OpenSSH version on VM. Please use PEM format (begins with -----BEGIN RSA PRIVATE KEY-----
) instead.
runs-on: ubuntu-latest
steps:
- name: Install SSH key
uses: shimataro/ssh-key-action@v1
with:
private-key: ${{ secrets.SSH_KEY }}
name: id_rsa # optional
known-hosts: ${{ secrets.KNOWN_HOSTS }} # known_hosts; optional
config: ${{ secrets.CONFIG }} # ssh_config; optional
- name: rsync over ssh
run: rsync ./foo/ user@remote:bar/
See Workflow syntax for GitHub Actions for details.
Install multiple keys
If you want to install multiple keys, call this action multiple times. It is useful for port forwarding.
NOTE: When this action is called multiple times, the contents of known-hosts
and config
will be appended. private-key
must be saved as different name, by using name
option.
runs-on: ubuntu-latest
steps:
- name: Install SSH key of bastion
uses: shimataro/ssh-key-action@v1
with:
private-key: ${{ secrets.SSH_KEY_OF_BASTION }}
name: id_rsa-bastion
known-hosts: ${{ secrets.KNOWN_HOSTS_OF_BASTION }}
config: |
Host bastion
HostName xxx.xxx.xxx.xxx
User user-of-bastion
IdentityFile ~/.ssh/id_rsa-bastion
- name: Install SSH key of target
uses: shimataro/ssh-key-action@v1
with:
private-key: ${{ secrets.SSH_KEY_OF_TARGET }}
name: id_rsa-target
known-hosts: ${{ secrets.KNOWN_HOSTS_OF_TARGET }} # will be appended!
config: | # will be appended!
Host target
HostName yyy.yyy.yyy.yyy
User user-of-target
IdentityFile ~/.ssh/id_rsa-target
ProxyCommand ssh -W %h:%p bastion
- name: SCP via port-forwarding
run: scp ./foo/ target:bar/
FAQ
What is the best way for copying files to multiple servers; SCP, SCP via bastion, SFTP, SFTP via bastion, rsync, and rsync via bastion?
I recommend rsync via bastion. It has some advantages over other methods:
- You only need to use this action once in order to connect to bastion from VM. Other methods require to use it multiple times in order to connect to each targets.
rsync
:- is faster than others.
- can remove files that don't exist in target.
- SCP:
- will break files when disconnected during sending.
- is deprecated by OpenSSH due to outdated and inflexible protocol.
- Using bastion is more secure because:
- it is not necessarily to expose SSH port on target servers to public.
- it requires to shutdown only bastion when security incident ―e.g., private key leaked, GitHub jacked― occurs.
License
The scripts and documentation in this project are released under the MIT License
Changelog
See CHANGELOG.md.