mirror of
https://github.com/shimataro/ssh-key-action.git
synced 2025-06-19 22:52:10 +10:00
Feature/known_hosts (#25)
* * add "known-hosts" option * * update CHANGELOG * * update README * * update actions.yml * * update example of known-hosts * * fix message
This commit is contained in:
parent
b9c6c52737
commit
3d8365bb3a
6 changed files with 75 additions and 25 deletions
|
@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
* `known-hosts` option
|
||||||
|
|
||||||
## [1.2.0]
|
## [1.2.0]
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -21,10 +21,11 @@ steps:
|
||||||
private-key: ${{ secrets.SSH_KEY }}
|
private-key: ${{ secrets.SSH_KEY }}
|
||||||
public-key: ${{ secrets.SSH_KEY_PUBLIC }}
|
public-key: ${{ secrets.SSH_KEY_PUBLIC }}
|
||||||
name: id_rsa # optional
|
name: id_rsa # optional
|
||||||
|
known-hosts: ${{ secrets.KNOWN_HOSTS }} # optional
|
||||||
- name: Install packages
|
- name: Install packages
|
||||||
run: apt install openssh-client rsync
|
run: apt install openssh-client rsync
|
||||||
- name: rsync over ssh
|
- name: rsync over ssh
|
||||||
run: rsync -e "ssh -o StrictHostKeyChecking=no" ./foo/ user@remote:bar/
|
run: rsync ./foo/ user@remote:bar/
|
||||||
```
|
```
|
||||||
|
|
||||||
See [Workflow syntax for GitHub Actions](https://help.github.com/en/articles/workflow-syntax-for-github-actions) for details.
|
See [Workflow syntax for GitHub Actions](https://help.github.com/en/articles/workflow-syntax-for-github-actions) for details.
|
||||||
|
|
|
@ -13,7 +13,12 @@ inputs:
|
||||||
required: true
|
required: true
|
||||||
name:
|
name:
|
||||||
description: "SSH key file name (default: id_rsa)"
|
description: "SSH key file name (default: id_rsa)"
|
||||||
|
required: false
|
||||||
default: "id_rsa"
|
default: "id_rsa"
|
||||||
|
known-hosts:
|
||||||
|
description: "public keys of SSH servers"
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
runs:
|
runs:
|
||||||
using: "node12"
|
using: "node12"
|
||||||
main: "lib/main.js"
|
main: "lib/main.js"
|
||||||
|
|
38
lib/main.js
38
lib/main.js
|
@ -15,23 +15,39 @@ const core = __importStar(require("@actions/core"));
|
||||||
*/
|
*/
|
||||||
function main() {
|
function main() {
|
||||||
try {
|
try {
|
||||||
|
const name = core.getInput("name");
|
||||||
|
const files = [
|
||||||
|
{
|
||||||
|
name: name,
|
||||||
|
mode: 0o400,
|
||||||
|
contents: core.getInput("private-key"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `${name}.pub`,
|
||||||
|
mode: 0o444,
|
||||||
|
contents: core.getInput("public-key"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "known_hosts",
|
||||||
|
mode: 0o644,
|
||||||
|
contents: core.getInput("known-hosts"),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
// create ".ssh" directory
|
||||||
const home = getHomeDirectory();
|
const home = getHomeDirectory();
|
||||||
const dirName = path.resolve(home, ".ssh");
|
const dirName = path.resolve(home, ".ssh");
|
||||||
fs.mkdirSync(dirName, {
|
fs.mkdirSync(dirName, {
|
||||||
recursive: true,
|
recursive: true,
|
||||||
mode: 0o700,
|
mode: 0o700,
|
||||||
});
|
});
|
||||||
const privateKey = core.getInput("private-key");
|
// create files
|
||||||
const publicKey = core.getInput("public-key");
|
for (const file of files) {
|
||||||
const name = core.getInput("name");
|
const fileName = path.join(dirName, file.name);
|
||||||
const fileName = path.join(dirName, name);
|
fs.writeFileSync(fileName, file.contents, {
|
||||||
fs.writeFileSync(fileName, privateKey, {
|
mode: file.mode,
|
||||||
mode: 0o400,
|
});
|
||||||
});
|
}
|
||||||
fs.writeFileSync(`${fileName}.pub`, publicKey, {
|
console.log(`SSH key has been stored to ${dirName} successfully.`);
|
||||||
mode: 0o444,
|
|
||||||
});
|
|
||||||
console.log(`SSH key has been stored to ${fileName} successfully.`);
|
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
core.setFailed(err.message);
|
core.setFailed(err.message);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,oDAAsC;AAEtC;;GAEG;AACH,SAAS,IAAI;IAEZ,IACA;QACC,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE;YACrB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;SACX,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAW,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAW,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAW,CAAC;QAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE;YACtC,IAAI,EAAE,KAAK;SACX,CAAC,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,GAAG,QAAQ,MAAM,EAAE,SAAS,EAAE;YAC9C,IAAI,EAAE,KAAK;SACX,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,gBAAgB,CAAC,CAAC;KACpE;IACD,OAAM,GAAG,EACT;QACC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC5B;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB;IAExB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,IAAG,IAAI,KAAK,SAAS,EACrB;QACC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC;KAC7C;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,IAAI,EAAE,CAAC"}
|
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,oDAAsC;AAStC;;GAEG;AACH,SAAS,IAAI;IAEZ,IACA;QACC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAW,CAAC;QAC7C,MAAM,KAAK,GAAe;YACzB;gBACC,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;aACtC;YACD;gBACC,IAAI,EAAE,GAAG,IAAI,MAAM;gBACnB,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;aACrC;YACD;gBACC,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;aACtC;SACD,CAAC;QAEF,0BAA0B;QAC1B,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE;YACrB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;SACX,CAAC,CAAC;QAEH,eAAe;QACf,KAAI,MAAM,IAAI,IAAI,KAAK,EACvB;YACC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACzC,IAAI,EAAE,IAAI,CAAC,IAAI;aACf,CAAC,CAAC;SACH;QAED,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,gBAAgB,CAAC,CAAC;KACnE;IACD,OAAM,GAAG,EACT;QACC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC5B;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB;IAExB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IACrE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,IAAG,IAAI,KAAK,SAAS,EACrB;QACC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,iBAAiB,CAAC,CAAC;KAC7C;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,IAAI,EAAE,CAAC"}
|
48
src/main.ts
48
src/main.ts
|
@ -3,6 +3,13 @@ import * as path from "path";
|
||||||
|
|
||||||
import * as core from "@actions/core";
|
import * as core from "@actions/core";
|
||||||
|
|
||||||
|
interface FileInfo
|
||||||
|
{
|
||||||
|
name: string;
|
||||||
|
mode: number;
|
||||||
|
contents: string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* main function
|
* main function
|
||||||
*/
|
*/
|
||||||
|
@ -10,6 +17,26 @@ function main(): void
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
const name = core.getInput("name") as string;
|
||||||
|
const files: FileInfo[] = [
|
||||||
|
{
|
||||||
|
name: name,
|
||||||
|
mode: 0o400,
|
||||||
|
contents: core.getInput("private-key"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `${name}.pub`,
|
||||||
|
mode: 0o444,
|
||||||
|
contents: core.getInput("public-key"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "known_hosts",
|
||||||
|
mode: 0o644,
|
||||||
|
contents: core.getInput("known-hosts"),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
// create ".ssh" directory
|
||||||
const home = getHomeDirectory();
|
const home = getHomeDirectory();
|
||||||
const dirName = path.resolve(home, ".ssh");
|
const dirName = path.resolve(home, ".ssh");
|
||||||
fs.mkdirSync(dirName, {
|
fs.mkdirSync(dirName, {
|
||||||
|
@ -17,19 +44,16 @@ function main(): void
|
||||||
mode: 0o700,
|
mode: 0o700,
|
||||||
});
|
});
|
||||||
|
|
||||||
const privateKey = core.getInput("private-key") as string;
|
// create files
|
||||||
const publicKey = core.getInput("public-key") as string;
|
for(const file of files)
|
||||||
const name = core.getInput("name") as string;
|
{
|
||||||
|
const fileName = path.join(dirName, file.name);
|
||||||
|
fs.writeFileSync(fileName, file.contents, {
|
||||||
|
mode: file.mode,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const fileName = path.join(dirName, name);
|
console.log(`SSH key has been stored to ${dirName} successfully.`);
|
||||||
fs.writeFileSync(fileName, privateKey, {
|
|
||||||
mode: 0o400,
|
|
||||||
});
|
|
||||||
fs.writeFileSync(`${fileName}.pub`, publicKey, {
|
|
||||||
mode: 0o444,
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log(`SSH key has been stored to ${fileName} successfully.`);
|
|
||||||
}
|
}
|
||||||
catch(err)
|
catch(err)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue