포스트

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

image image


cross-the-world/ssh-scp-ssh-pipelines 라이브러리 사용

Github Marketplace : https://github.com/marketplace/actions/ssh-scp-ssh-pipelines


이 라이브러리는

  1. ssh에 접속해서 초기화 작업
  2. scp를 이용하여 파일 전송
  3. 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

image


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

image




참고한 사이트

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.