使用 putty 生成的私钥进行 SCP 部署时遇到了问题,折腾了半天发现是格式问题。记录一下。
为了方便 Putty 登录 Linux 服务器方便,使用 puttygen.exe 使用图形界面的方式保存了公钥和私钥。将公钥放到服务器上,私钥在存在本机,然后登录时在 Auth 部分写入地址,即可实现无密码登录。
cd /root/.ssh
vi ./authorized_keys
# 粘贴公钥进去,然后保存退出
:wq
2
3
4
结果最近想使用 Github Action 进行网站自动部署,除了部署在 Github Pages 之外,还将编译后的成果使用 SCP 方式上传到服务器静态目录一份。本来是很简单的一个操作,但是由于没有服务器密码,只能使用私钥认证来进行 SCP,结果就遭遇了错误。
使用的脚本地址是这个:https://github.com/garygrossgarten/github-action-scp
其中涉及到要用的 host, username 都以 secrets 变量的形式保存在:
https://github.com/用户名/项目地址/settings/secrets
将上面链接中的用户名和项目地址替换为自己的。然后就可以在 actions 脚本中以
${{secrets.HOST}}
这种方式调用。
脚本这里提示 privateKey 要使用(OpenSSH format)就把我弄蒙了。
先测了一下 putty 存出来的私钥,以文本的形式拷贝到 secrests 中,失败;又手工按其他格式编辑了下,还是失败。
提示更让我叫惨,总不是让我传私钥文件上去然后附路径吧,又会引发一次泄露惨案。
最后抱着试试看的心态再用 ssh-keygen 生成一份密钥对看看。
生成以后登录就给了一个下马威:
格式太老,不给登录用。
但是谁曾想,这个破格式反而在 action 上成功了。
简直叫人崩溃。所以现在两组密钥同时用上了,一组登录一组部署。
下面是我的部署脚本,供参考。
name: Node CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Build and Deploy
uses: JamesIves/github-pages-deploy-action@master
env:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
BASE_BRANCH: dev # The branch the action should deploy from.
BRANCH: master # The branch the action should deploy to.
FOLDER: dist/spa # The folder the action should deploy.
BUILD_SCRIPT: npm install && npm install -g @quasar/cli && quasar build # The build script the action should run prior to deploying.
- name: DeployToMain
uses: garygrossgarten/github-action-scp@release
with:
local: dist/spa
remote: /home/ec2-user/nginx/justdao
# 涉及偏安全隐私的信息,不要明文暴露在此文件中,因为repo很可能是公开的,会被所有人看见
# ${{ ... }} 会应用你在对应项目设置中,配置的对应serets的键值信息,从而保护私密信息不被看到
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
privateKey: ${{ secrets.PEM }}
# concurrency: 20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37