티스토리 뷰
발생일: 2014.01.14
Authentication and authorisation키워드: Capistrano, 카피스트라노, 인증
문제:
개인 프로젝트에 배포 자동화를 도입하려고 Capistrano를 알아보고 있다.
각 서버 간 SSH로 인증/인가하는 가이드를 보면서 정리해둔 내용이다.
해결책:
인증 자동화가 필요한 곳
1. 개발자 로컬 피씨에서 서버로
- key agent를 써서 SSH Keys로 해결한다.
- 공개키를 서버에 두고, 로컬의 SSH 클라이언트에서 비공개 키로 확인해 로그인한다.
- 공개키를 서버의 deploy 유저의 `authorized_keys` 파일에 추가한다.
- 로컬에서는 `ssh-keygen -t rsa -C ‘me@my_email.com` 명령으로 생성한다.
이 때 passphrase 가 필요한데, 적당한 값을 넣어둔다.
이건 누군가 로컬 PC를 탈취했을 때, 키에 액세스할 때 필요한 값이다.
- 매번 passphrase를 넣는 걸 피하기 위해서 대부분의 운영체제는 `key agent`라는 걸 제공한다.
`key agent`는 SSH 키를 보관하고 있다가, 키가 필요할 때 로드하면서 passphrase를 묻고,
유효 시간 동안 `key agent`가 passpharse를 저장하고 있는 방식이다.
(OSX는 무한정, 리눅스는 15분에서 더 큰 값까지 다양하다)
- `ssh-add -l`로 현재 로드되어 있는 SSH agent 값을 볼 수 있다.
추가하려면 단순히 `ssh-add`를 입력하면 된다.
- 로컬 피씨에서 생성한 퍼블릭 키는 `ssh-add -L` 명령으로 가져올 수 있다.
이렇게 가져온 키는 각 서버의 `deploy/.ssh/authoized_keys` 파일에 추가해준다.
`authorized_keys` 파일의 권한은 0600으로,
`~/.ssh` 디렉토리는 0700으로 설정되어야 한다.
- 모든 작업이 완료됐으면 passphrase 를 묻지 않고 아래 구문이 정상적으로 출력되어야 한다.
`ssh deploy@one-of-my-servers.com ‘hostname; uptime'
2. 서버에서 소스 리파지터리로
- SSH agent forwarding으로 해결한다.
- 1번에서 만든 ssh key를 서버에서 사용하도록 할 수 있다.
- 먼저, 리파지터리의 URL을 가져오고, (ex) git@github.com:ohgyun/testapp.git
- 아래와 같이 포트 포워딩으로 처리할 수 있다.
`ssh -A deploy@one-one-of-my-servers.com ‘git ls-remote git@github.com:ohgyun/testapp.git’`
- 로컬과 서버에서 모두 포워딩을 허용하고 있어야 한다.
- 또는, 깃헙 리파지터리에서 Deploy Keys를 추가할 수 있다.
공개키를 깃헙에 올려두고, 비밀키를 각 서버에서 갖고 접근하는 방식이다.
Authorization
- deploy 유저가 특정 디렉토리에 권한을 가질 수 있도로 한다.
- `:deploy_to` 변수로 설정하는 디렉토리 권한을 `deploy`로 준다.
# Capistrano will use /var/www/....... where ... is the value set in
# :application, you can override this by setting the ':deploy_to' variable
root@remote $ deploy_to=/var/www/rails3-bootstrap-devise-cancan-demo
root@remote $ mkdir -p ${deploy_to}
root@remote $ chown deploy:deploy ${deploy_to}
root@remote $ umask 0002
root@remote $ chmod g+s ${deploy_to}
root@remote $ mkdir ${deploy_to}/{releases,shared}
반응형
댓글
공지사항