Skip to content
This repository has been archived by the owner on Sep 12, 2018. It is now read-only.

Ssh기능 추가 #858

Open
wants to merge 5 commits into
base: next
Choose a base branch
from
Open

Ssh기능 추가 #858

wants to merge 5 commits into from

Conversation

oh4851
Copy link

@oh4851 oh4851 commented Feb 9, 2015

@npcode @doortts 다시 보냅니다.
@KOR-Believer

리뷰해주신 내용 반영한 부분입니다.

  • Diagnostic에 sshdaemon을 등록했습니다.
  • app/models/ssh에서 ebean.Model을 상속받지 않은 것은 app/sshs로 이동했습니다.
  • "yobi", 22 -> 상수 처리했습니다.
  • exist()메서드 이름 변경 -> findByKey()
  • publicKeyAuth의 불필요한 result변수 제거
  • 조건문에 포함 한 주석 변경 (if public key exists)

현재 수정중인 부분입니다.

  • DaemonClient, SshServerSession, SshServerSessionFactory에서 실제 필요한 부분은 제한적이어서 새로 작성할 수 있을 것 같습니다.
  • SshKey.java를 수정 중입니다.

ssh url복사
프로젝트 내 ssh url 복사
sshkey관리
설정창 내 sshkey관리

@oh4851
Copy link
Author

oh4851 commented Feb 9, 2015

네 중간에 메서드 명을 바꿨던게 문제였습니다.

@eungjun-yi
Copy link
Contributor

동작방식을 알아야 리뷰를 할 수 있으니 최우선적으로 문서를 추가해주세요.

@oh4851 oh4851 force-pushed the review branch 4 times, most recently from 098b3ae to b234a0f Compare February 10, 2015 06:44
@oh4851
Copy link
Author

oh4851 commented Feb 11, 2015

문서에 대한 리뷰 링크: ssh-daemon.md
포트 사용방법 수정

  • 사용자가 application.conf에서 ssh.port를 설정할 경우 해당 포트로 동작
  • 설정하지 않았거나 well known포트 일 경우 well known포트로 동작(22)

만약 sshd가 정상적으로 실행되지 않았을 경우 (해당 포트가 이미 사용되고 있을 경우) 프로젝트 페이지에 ssh주소복사와 관련 된 요소가 보이지 않도록 수정

@oh4851 oh4851 force-pushed the review branch 3 times, most recently from 8609f72 to 599c532 Compare February 11, 2015 07:17
@KOR-Believer
Copy link

ssh-daemon.md 수정사항 입니다.

  • 데몬 초기화 과정 설명 중 port 우선순위 이슈를 해결한 방법으로 설명을 수정하였습니다.
  • ssh 주소 형식에 프로젝트 소유자와 프로젝트 이름을 포함하였습니다.
  • 사용자의 인증 과정에서 오류 메시지 출력이 클라이언트 사이드 인 경우 문장을 명확하게 수정하였고,
    개인키 인증 과정에 부연 설명을 하였습니다. (클라이언트에서 개인키 체크)
  • SSH 데몬의 쉘 접근 설명에서, SshCommandFactory를 통해 git-upload-pack과 git-receive-pack 명령이 확인/실행되는것으로 문장을 수정하였습니다.

SshDaemon은 서버 실행 후 Global의 onStart함수에 의해 한 번 호출되어 데몬으로 동작한다.
onStart함수는 activator의 start로 서버 구동 시 최초 1번 실행된다.
(run 모드에서는 http의 최초 리퀘스트 발생시 1번 실행된다.)
따라서 데몬의 중복 실행을 고려한 코드 작성은 필요치 않다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

onStart함수는 activator의 start로 서버 구동 시 최초 1번 실행된다.
(run 모드에서는 http의 최초 리퀘스트 발생시 1번 실행된다.)
따라서 데몬의 중복 실행을 고려한 코드 작성은 필요치 않다.

읽는 사람은 onStart 함수가 뭔지/무슨 일을 하는지 모르기 때문에 onStart 함수가 어떻게 동작하는지에 대한 설명은 필요하지 않을 것 같네요.

@eungjun-yi
Copy link
Contributor

Yobi 사용자나 운영자가 보안 관련해서 고려해야 할 점은 없나요? 있다면 그것도 문서에 적어주세요.

@eungjun-yi
Copy link
Contributor

커밋들을 대략 이런식으로 합치고 나누면 좋을 것 같습니다.

  1. 최소한의 SSH 지원 기능을 구현한 커밋
  2. 기능을 개선하는 커밋들 (예: ssh.port 설정 기능 추가, ssh 대몬 진단 기능 추가, ...)

커밋 하나하나가 독자적으로 Yobi를 조금이라도 더 나아지게 만드는 것이면 좋습니다. 그래야 해당 커밋을 읽는 리뷰어나 미래에 읽을 누군가가 이 커밋이 Yobi에게 필요한 이유가 무엇인지 쉽게 이해할 수 있습니다.

Host key verification failed.
```
이 경우 사용자는 ~/.ssh/known_hosts파일을 수정해야 접속이 가능하다.
> known_hosts파일은 사용자가 ssh로 접속을 시도했던 서버들의 공개키 정보를 담고 있다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

>는 인용할때 사용하는 것인데요. 여기는 인용이 아닌 것 같아보여요.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 수정하겠습니다.

@oh4851
Copy link
Author

oh4851 commented Feb 12, 2015

커밋을 재분류했습니다.

  • ssh지원을 위한 커밋
    • sshd지원에 필요한 model추가, sql쿼리 추가(97.sql)를 포함합니다.
    • ignore추가, dependency추가, 상수추가를 포함합니다.
  • view지원을 위한 커밋 (필요하면 바로 전 커밋과 합칠 수 있을 것 같습니다)
    • ssh url 표시 및 복사 기능을 포함합니다.
    • sshkey관리 페이지를 포함합니다.
  • ssh.port를 활용한 sshd포트설정을 추가하는 커밋
  • Diagnostic에 sshd등록을 추가하는 커밋

@eungjun-yi
Copy link
Contributor

지금 next 브랜치에 보면 2cbe12b 에서 findbugs 지원이 들어갔는데요. findbugs로 코드의 잠재적 결함을 찾을 수 있습니다. 그걸 이용해서 작성한 코드 중 결함이 예상된다고 보고되는 코드가 있으면 바로잡아주세요.

@oh4851
Copy link
Author

oh4851 commented Feb 12, 2015

현재까지 진행한 부분에 대해서 다시 푸쉬합니다.

  • 문서 수정, table이름 수정, 그 외 자잘한 코드 수정

앞으로 진행할 부분

  • ssh.port에 숫자가 아닌 다른값을 잘못 입력한 경우에 대한 예외 처리
  • sshd core커밋과 view(sshkey관리 페이지, ssh url표시 및 복사)커밋을 합칠지 말지 결정
  • findbugs로 결함 확인 및 수정

@oh4851 oh4851 force-pushed the review branch 2 times, most recently from 38fd0c6 to beb6ba5 Compare February 12, 2015 07:44
}

public static String add(SshUser key) {
key.registerDate = new Date();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

키를 추가함을 의미하려고 할 때 "add"를 쓰기도 하고 "register"라고 하기도 하는데 차이가 있나요?

@oh4851
Copy link
Author

oh4851 commented Feb 25, 2015

변경내용

  • 커맨드 팩토리 Split -> 토크나이저
  • SSHS -> SSH
  • SshKey, UserSshKey통합
  • 자잘한 네이밍 수정(add -> register통일, connected -> used 통일, deletesshkey -> key)
  • Not found -> forbidden
  • SimpleDateFormat관련 내용 변경

진행할 것

  • SshDaemon 싱글턴 으로 변경
  • SshShellFactory 추가 커밋 분리
  • SShDaemonClient 수정

@oh4851
Copy link
Author

oh4851 commented Feb 26, 2015

진행할 것

  • ssh.port가 주석처리 되어있는 경우 default포트 22로 잡아놓음 -> 다른 포트로 default설정
  • 위 내용 기술문서에 반영

hash = getMD5(getKey().getEncoded());
} else {
final String[] parts = rawData.split(" ", 3);
final byte [] bin = Base64.decodeBase64(Constants.encodeASCII(parts[1]));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사용자가 프로필 페이지에서 SSH 키를 추가할 때, 아무것도 입력하지 않고 추가 버튼을 클릭하면 여기서 ArrayIndexOutOfBoundsException 예외가 발생하네요.

@eungjun-yi
Copy link
Contributor

사용자 SSH 키 등록 페이지에 public key를 어디서 가져올 수 있는지에 대한 안내가 필요할 것 같네요.

@oh4851
Copy link
Author

oh4851 commented Feb 26, 2015

github ssh-key generate 안내 같은 것을 말씀하시는 거죠?
https://help.github.com/articles/generating-ssh-keys/

@eungjun-yi
Copy link
Contributor

@oh4851 네 그런거요. 그냥 그 페이지 링크를 걸어도 좋을 것 같긴 한데 읽어보니 뒷부분엔 Github에 설정하는걸로 끝나는 문제가 있네요.

@KOR-Believer
Copy link

그럼 별도의 안내 페이지를 한개 작성해서 링크를 해 볼까요?
아니면 하단에 간략한 메시지로 설명을 하는것이 나을런지요.
메시지로 키 생성 과정을 설명하기에는 조금 긴 느낌이 들기도 하는데 어떤 방법이 좋을까요

@oh4851
Copy link
Author

oh4851 commented Feb 26, 2015

변경내용

  • ssh.port가져올 때 getString() -> getInt()로 변경
  • default포트 22000으로 수정 (22는 일반적으로 이미 사용하고 있을 가능성이 큼)
  • SshShellFactory 주석 추가 및 커밋 분리
  • SSH키추가 시 ArrayIndexOutOfBoundsException 처리
  • 프로젝트 홈의 URL주소복사 관련 수정
    • "코드"를 사용하지 않는 프로젝트에서도 HTTP, SSH선택하는 버튼 나오는 버그 수정
    • 프로젝트 Description을 2 line넘게 입력할 경우 url표시 위치와 url타입 선택 버튼 간격이 벌어져서 버튼 위치를 url표시 위치 위로 올림

진행할 것

  • SshDaemon 싱글턴 으로 변경
  • SShDaemonClient 클래스주석, 수정(확인 필요)
  • "SSH키 관리" 페이지에 키 등록 안내 추가

@oh4851 oh4851 force-pushed the review branch 3 times, most recently from 0498151 to 0603cb4 Compare February 27, 2015 06:34
@oh4851 oh4851 force-pushed the review branch 2 times, most recently from 15738f0 to 4249a85 Compare March 17, 2015 09:49
@oh4851
Copy link
Author

oh4851 commented Mar 17, 2015

변경내용

  • SshDaemonClient제거 -> SshServerSessionFactory의 USER_KEY 멤버로 키 대체

해야하는 것

  • SshDaemon 싱글턴 변경
  • " SSH키 관리" 페이지 안내 추가

oh4851 and others added 5 commits March 30, 2015 03:51
- Add ignore case to .gitignore(.pem) : This file will be generated by
- sshd for host authentication
- Add Constants

- Add dependency to build.sbt for sshd service
 - Apache Library (mina-core, sshd-core) for sshd
 - Bouncycastle Library (bcprov, bcmail, bcpkix) for pem

- Add model for storing users sshkey information (SshUser.java)
 - Add member field to n4user model for storing sshkey information
 - Add sql query for storing sshkey information(99.sql)

- Add mina-sshd core into yobi project
 - Add code for running sshd in yobi
 - Add sshdaemon start command into Global.java

- Add View for ssh service(edit, project)
 - Add messages for ssh service
 - Add url type(http, ssh) select & copy service into project.home
 - Add ssh edit page to manage sshkey
  (1) register user's ssh publickey to server
  (2) delete user's ssh publickey from server
  (3) key validation check
- Support a detailed rejection message to the user who direct access to the
shell.
- this commit supports that user can be select ssh.port.
- If you don't remove annotation ssh.port (application.conf.default &
  application.conf) then your sshd try to run with [22000]
- If you want to use other port you just remove annotation and change ssh.port value
- this commit support sshd diagnostics.
- Diagnostic tool checks 3 state of sshd condition.
 > 1. sshd is null : sshd isn't initialized
 > 2-1. sshd is not running : port is out of range (0 ~ 65535)
 > 2-2. sshd is not running : port conflict
 > 3. otherwise : sshd has no problem with running
@oh4851
Copy link
Author

oh4851 commented Mar 29, 2015

변경내용

  • "SSH키 관리" 페이지 안내 추가 [author: @KOR-Believer]

TODO

  • SshDaemon Singleton

try {
sshd.stop();
} catch (InterruptedException e) {
e.printStackTrace();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

printStackTrace로 출력하면 로그파일에는 기록이 안 될텐데요. 의도적인 것인가요?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants