Github 작업에서 SSH 및 Rsync를 통해 서버에 배포
이 과정에서 가장 어려운 부분은 SSH와 rsync를 사용하여 서버에 배치하는 것이다.나는 SSH Deploy와SSH Action 등 여러 가지 Github 조작을 시도했지만 오랫동안 업무 권한을 얻지 못했다.
나는 Github 작업과 SSH에 관한 대부분의 글이 나에게 큰 도움이 되지 않는다는 것을 발견했다.내가 마침내 이 과정을 어떻게 해야 할지 생각하기 전에, 나는 디버깅에 며칠 동안 갇혔다.
오늘은 rsync와 SSH 배치를 통한 정확한 절차를 공유하고 싶습니다.이 절차는 Digital Ocean을 사용하지 않더라도 모든 서버에 적용됩니다.
1단계: SSH 키 생성
로컬 컴퓨터나 서버에서 SSH 키를 생성할 수 있습니다.나중에 키를 삭제할 수도 있지만 다른 Github 작업에 SSH 키를 다시 사용할 수 있도록 서버에서 이 작업을 수행하는 것이 좋습니다.
이 경우 SSH를 서버에 연결합니다.
ssh [email protected]
서버에 접속한 후 .ssh
폴더로 이동합니다.여기서 SSH 키를 생성합니다.cd ~/.ssh
SSH 키를 생성할 때는 사용할 수 없습니다default instructions on Github's generating an SSH key page.이는 Github 작업이 최신 Ed22159 알고리즘을 지원하지 않기 때문입니다.우리는 유류 명령을 사용해야 한다.다음은 당신이 사용해야 할 명령입니다.이메일 주소로 바꾸는 것을 기억하세요.
[email protected]
ssh-keygen -t rsa -b 4096 -C "[email protected]"
참고: 일부 Github Action 작성자는 SSH 키를 사용하려면 PEM 형식이 필요하다고 말합니다.이거 가짜야.나는 이미 표준 RSA 형식으로 테스트를 진행했는데, 그것은 작동할 수 있다.그런 다음 SSH 키 파일의 이름을 지정해야 합니다.여기서 기본 파일 이름 (즉
id_rsa
을 사용하는 것을 권장하지 않습니다.이 키가 Github 작업에 사용된다는 것을 알 수 있도록 파일 이름을 github-actions
로 바꾸는 것을 권장합니다.6개월 후에 SSH 키를 볼 때 명시적으로 표시할 가치가 있습니다.암호 구문도 제공해야 합니다.Github에서 SSH 명령을 실행할 때 암호를 입력할 수 없으므로 비워 둡니다.
SSH 키를 생성하면 다음과 같은 귀여운 이미지가 나타납니다.
ls
명령을 사용하고 있다면, .ssh
폴더에서 키를 볼 수 있을 것입니다.ls
공개 키는 .pub
확장자를 포함하지만 개인 키는 포함하지 않습니다.2단계: 공인 키에 공개 키 추가
개인 키 ((
github-actions.pub
를 사용하는 기기가 서버에 접근할 수 있도록 키 authorized_keys
를 github-actions
에 추가해야 합니다.가장 간단한 방법은
cat
명령을 사용하여 github-actions.pub
를 authorized_keys
에 추가하는 것이다.그것은 이렇게 보인다.cat github.pub >> authorized_keys
명령의 역할은 다음과 같습니다.github.pub
캡처cat
의 내용.authorized_keys
뒤에 >>
를 붙인다.>>
이 아닌 이중 직각 브래킷>
을 사용해야 합니다.Double은 추가를 나타내고 single은 덮어쓰기를 나타냅니다.조심하다3단계: 저장소 기밀에 개인 키 추가
Github의 저장소로 이동하여 "설정"을 누르고 "기밀"을 누르십시오.'새 저장소 기밀'이라고 적힌 단추가 보일 것입니다.
New repository secret을 클릭하면 암호를 묻는 메시지가 표시됩니다.그 비밀에는 비밀의 이름과 내용 두 가지가 포함되어 있다.이 비밀 이름은 나중에 Github 작업 흐름에서 내용을 얻는 데 사용됩니다.
비밀 이름을 쓸 때, 자리 표시자와 같이 대문자로 밑줄을 공백으로 사용하십시오.이것은 우리가 통상적으로 비밀을 지정하는 격식이다.
이 예에서 나는 이 비밀의 이름
SSH_PRIVATE_KEY
을 선택했다.가치를 얻기 위해서는 서버로 돌아가서
github-actions
개인 키를 열어야 합니다.우리는 nano.
로 이 점을 실현할 수 있다.nano github-actions
너는 유사한 파일을 볼 수 있을 것이다.(내가 이 열쇠를 드러낼까봐 걱정하지 마라. 나는 이미 그것을 망가뜨렸다. 나는 단지 너에게 도대체 무슨 일이 일어날지 보여주고 싶었을 뿐이다.)모든 내용을 복사해서 비밀값에 붙여넣어야 합니다
우리는 이렇게 열쇠를 사용할 수 있다.
다음에 "비밀 추가"를 누르면 비밀 페이지로 가져옵니다.여기에는 저장소 기밀 문서
SSH_PRIVATE_KEY
가 표시됩니다.4단계: Github 작업 워크플로우에 개인 키 추가
나는 당신이 이미 알고 있다고 가정하기 때문에 how to create a basic Github Actions file SSH 키를 추가하는 절차만 여기서 토론할 것입니다.
개인 키를 추가하는 것은 복잡한 작업입니다. 여기에서 사용할 수 있는 Github 동작을 찾겠습니다.나에게 유일하게 효과적인 행동은 도진의Install SSH Key이다.
steps:
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
SSH 키 설치 작업에는 두 개의 입력key
과 known_hosts
값이 필요합니다.key
는 Github Secrets에 추가된 개인 키입니다.우리는 이런 비밀을 사용할 수 있다.steps:
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_PRIVATE_KEY }}
known_hosts
값은 이상한 산열값이다.known_hosts
서버에서 .ssh
파일을 열면 다음과 같이 표시됩니다.Github 운영 기밀에 값 중 하나를 추가해야 합니다.우리가 처음에 어떻게 이 값을 얻었지?!불행하게도, Github의 모든 조작이 나에게 이 점을 알려주지 않았기 때문에, 나는 어쩔 수 없이 구글에서 한동안 검색을 해야만 했다.
고맙습니다. 우리는 명령을 사용하여 이 이상한 산열 값을 생성할 수 있습니다.나는 다음 단계에서 이 명령을 토론할 것이다.현재 Shimataro의 Install SSH 키에 오류가 발생하지 않도록
known_hosts
에 임의 값을 추가하기만 하면 됩니다.steps:
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_PRIVATE_KEY }}
known_hosts: 'just-a-placeholder-so-we-dont-get-errors'
5단계: 올바른 알려진 값 추가
우리는
known_hosts
명령을 사용하여 정확한 ssh-keyscan
값을 생성할 수 있다.보아하니 이렇다.ssh-keyscan -H IP_ADDRESS_OF_HOST
IP_ADDRESS_OF_HOST
를 서버의 실제 IP 주소로 바꾸면 다음과 같은 결과를 얻을 수 있습니다.(제 IP 주소를 생략했지만 다른 모든 내용을 보여 드리려고 합니다.)이 사실을 알게 되면 Github 기밀에 IP 주소 (내 이름
SSH_HOST
를 수동으로 추가할 수 있습니다.그리고 우리는
ssh-keyscan
를 통해 정확한 정보를 생성하여 known_hosts
파일에 추가할 수 있다.steps:
# ...
- name: Adding Known Hosts
run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
6단계: Rsync 서버 시작
SSH를 통해 rsync를 서버에 동기화할 수 있습니다.이를 위해서는 SSH 사용자와 호스트에 대해 알아야 합니다.다음은 명령의 모습이다.
rsync -flags source user@host:destination
flags
는 당신이 그것과 동기화하기를 원하는 표지입니다.우리는 보통 avz
를 사용하는데 이것은 archive
, verbose
와 compress
를 대표한다.만약 당신이 처음rsync-ing이라면, 저도 n
에 dry-run
로고를 사용하시기를 권장합니다.source
복제할 소스 파일user@host
는 서버의 사용자 이름과 IP 주소입니다.이런 가치관은 비밀로 해야 한다.destination
는 복사할 파일의 위치입니다.- name: Deploy with rsync
run: rsync -avz ./dist/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/home/zellwk/zellwk.com/dist/
verbose
로고가 있기 때문에 rsync를 통해 복제된 자원 목록을 볼 수 있을 것입니다.이렇게!
마무리
다음은 모든 것을 정리하는 절차이다.
authorized_keys
known_hosts
읽어주셔서 감사합니다.본문은 최초로 my blog에 발표되었다.더 많은 글을 원하시면 더 좋은 전단 개발자가 되도록 도와주십시오. my newsletter
Reference
이 문제에 관하여(Github 작업에서 SSH 및 Rsync를 통해 서버에 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zellwk/deploying-to-a-server-via-ssh-and-rsync-in-a-github-action-2acd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)