Github Actions - SCP 사용하기
github actions에서 scp를 통한 파일 전송 방법을 기록
appleboy/scp-action 라이브러리 사용
Github Marketplace : https://github.com/marketplace/actions/scp-command-to-transfer-files
라이브러리를 사용하면 간단한 옵션 설정으로 ssh 접근을 할 수 있다.
1
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
38
39
40
41
42
43
44
45
jobs:
appleboy-scp:
runs-on: ubuntu-latest
steps:
- name: EC2 파일 정리
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.STUDY_INSTANCE_HOST }}
username: ${{ secrets.STUDY_INSTANCE_USERNAME }}
key: ${{ secrets.STUDY_INSTANCE_SSH_KEY }}
port: ${{ secrets.STUDY_INSTANCE_PORT }}
script: |
rm -rf ~/run-script.sh
- name: EC2에서 실행할 쉘 스크립트 run-script.sh 작성
run: |
echo 'echo "Hello"' > run-script.sh
echo 'pwd' >> run-script.sh
echo 'ls -al' >> run-script.sh
chmod +x run-script.sh
- name: SCP로 EC2에 파일 전송하기
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.STUDY_INSTANCE_HOST }}
username: ${{ secrets.STUDY_INSTANCE_USERNAME }}
key: ${{ secrets.STUDY_INSTANCE_SSH_KEY }}
source: run-script.sh
target: ~/
appleboy-ssh:
needs: appleboy-scp
runs-on: ubuntu-latest
steps:
- name: scp로 받은 파일 실행
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.STUDY_INSTANCE_HOST }}
username: ${{ secrets.STUDY_INSTANCE_USERNAME }}
key: ${{ secrets.STUDY_INSTANCE_SSH_KEY }}
port: ${{ secrets.STUDY_INSTANCE_PORT }}
script: |
~/run-script.sh
cross-the-world/ssh-scp-ssh-pipelines 라이브러리 사용
Github Marketplace : https://github.com/marketplace/actions/ssh-scp-ssh-pipelines
이 라이브러리는
- ssh에 접속해서 초기화 작업
- scp를 이용하여 파일 전송
- ssh에 접속해서 마지막 작업 의 3단계를 수행해야 할 경우에 사용하면 좋다.
1
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
jobs:
ssh-scp-ssh-pipelines:
runs-on: ubuntu-latest
steps:
- name: ssh 호스트 서버에서 실행할 쉘 스크립트 run-script.sh 작성
run: |
echo 'echo "Hello"' > run-script.sh
echo 'pwd' >> run-script.sh
echo 'ls -al' >> run-script.sh
chmod +x run-script.sh
- name: ssh -> scp -> ssh
uses: cross-the-world/ssh-scp-ssh-pipelines@latest
with:
host: ${{ secrets.STUDY_INSTANCE_HOST }}
user: ${{ secrets.STUDY_INSTANCE_USERNAME }}
key: ${{ secrets.STUDY_INSTANCE_SSH_KEY }}
port: ${{ secrets.STUDY_INSTANCE_PORT }}
connect_timeout: 60s
first_ssh: |
rm -rf ~/run-script.sh
ls -al
scp: |
run-script.sh => ~/
last_ssh: |
~/run-script.sh
scp 명령어 사용으로 파일 전송
ssh 명령어를 사용할 때와 마찬가지로 ssh 관련 옵션을 주어 사용한다.
1
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
38
39
40
41
42
43
44
45
46
47
48
49
50
jobs:
scp:
runs-on: ubuntu-latest
env:
SSH_HOME: /home/runner/.ssh
HOME: /home/runner
HOST_HOME: /home/ubuntu
steps:
- name: ssh 호스트 서버에서 실행할 쉘 스크립트 run-script.sh 작성
run: |
echo 'echo "Hello"' > $HOME/run-script.sh
echo 'pwd' >> $HOME/run-script.sh
echo 'ls -al' >> $HOME/run-script.sh
chmod +x $HOME/run-script.sh
- name: key 파일 생성
run: |
mkdir -p -v $SSH_HOME
echo "${{ secrets.STUDY_INSTANCE_SSH_KEY }}" > $SSH_HOME/ec2-study.pem
- name: key 파일 권한 설정
run: sudo chmod 400 $SSH_HOME/ec2-study.pem
- name: 서버의 공개키 정보를 'ssh known_hosts'에 저장
run: ssh-keyscan -t rsa -H ${{ secrets.STUDY_INSTANCE_HOST }} > $SSH_HOME/known_hosts
- name: EC2에서 파일 삭제
run: |
ssh \
-i $SSH_HOME/ec2-study.pem \
-p ${{ secrets.STUDY_INSTANCE_PORT }} \
${{ secrets.STUDY_INSTANCE_USERNAME }}@${{ secrets.STUDY_INSTANCE_HOST }} rm -rf $HOST_HOME/run-script.sh
- name: SCP로 EC2에 파일 전송하기
run: |
scp \
-i $SSH_HOME/ec2-study.pem \
$HOME/run-script.sh \
${{ secrets.STUDY_INSTANCE_USERNAME }}@${{ secrets.STUDY_INSTANCE_HOST }}:$HOST_HOME/
# EC2에 접속해서 받은 파일 실행하기
- name: SSH로 받은 파일 실행하기
run: |
ssh \
-i $SSH_HOME/ec2-study.pem \
-p ${{ secrets.STUDY_INSTANCE_PORT }} \
${{ secrets.STUDY_INSTANCE_USERNAME }}@${{ secrets.STUDY_INSTANCE_HOST }} $HOST_HOME/run-script.sh
참고한 사이트
- scp-action https://github.com/marketplace/actions/scp-command-to-transfer-files
- ssh-scp-ssh-pipelines https://github.com/marketplace/actions/ssh-scp-ssh-pipelines
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.