SSH를 통해 Eclipse로 원격 프로젝트 작업


192

다음과 같은 상자가 있습니다.

  1. Eclipse CDT가 포함 된 Windows 상자
  2. SSH를 통해서만 액세스 할 수있는 Linux 상자.

프로젝트를 빌드하고 실행하는 데 필요한 컴파일러와 하드웨어는 모두 머신 B에만 있습니다.

Eclipse CDT를 사용하여 해당 프로젝트의 Windows 상자에서 "투명하게"작업하고 IDE 내에서 원격으로 프로젝트를 빌드, 실행 및 디버깅하고 싶습니다.

어떻게 설정합니까?

  • 건물이 작동합니까? rsync프로젝트 를 만들 로컬 makefile을 작성한 다음 원격 makefile을 호출하여 실제 빌드를 시작 하는 것보다 간단한 솔루션이 있습니까? Eclipse 관리 빌드에는 그 기능이 있습니까?
  • 디버깅이 작동합니까?
  • 바람직하게는 Eclipse CDT 코드 색인이 작동합니까? 머신 B에서 머신 A로 필요한 모든 헤더 파일을 복사하고 경로를 수동으로 포함하도록 추가해야합니까?

4
코스, 결국 RSE를 사용하셨습니까? 당신의 경험은 어땠습니까?
Aleksandr Levchuk

2
나는 그것을 관리했지만, a) CDT는 가상 파일 시스템을 인식하는데 문제가 있었다. b) 나는 (사용자 정의 makefile을 통해) 내 자신의 컴파일 체인을 롤업해야했고 c) 불쾌한 성가심 파일 저장은 2 ~ 3 초 정도 걸리고 방해가되었습니다.
Kos

1
오늘 원격으로 다시 작업해야하는 경우 RSE를 사용하여 또 다른 스핀을 시도 할 수도 있지만 로컬 프로젝트로 유지하고 예 rsync를 들어 말하는.
코스

2
그리고 불행히도-원격 라이브러리 헤더의 원격 디버깅 또는 인덱싱을 설정하지 못했습니다. 나는 후자가 이루어질 수 있는지 의심합니다. 전자-나는 그것을 할 수 있다고 긍정적이지만, 실제로 그것을 파헤칠 필요는 없었습니다.
Kos

먼저 로그인 서버에 로그인 한 다음 원격 시스템에 로그인하여 원격 시스템에 액세스합니다. 둘 다 다른 비밀번호를 가지고 있습니다. Eclipse에서 그러한 원격 시스템에서 작업 할 수있는 방법이 있습니까?
Arjun J Rao

답변:


219

원격 시스템 탐색기 (RSE)를 사용해보십시오 . 원하는 것을 정확하게 수행하는 플러그인 세트입니다.

RSE는 현재 Eclipse 설치에 이미 포함되어있을 수 있습니다. Eclipse Indigo에서 체크인하려면 > Perspective 열기 > 기타 ...로 이동 하고 Perspective 열기 대화 상자 에서 원격 시스템 탐색기 를 선택 하여 RSE Perspective를여십시오.

Eclipse의 RSE 관점에서 SSH 원격 프로젝트를 작성하려면 다음을 수행하십시오.

  1. 새 연결을 정의하고 새 연결 대화 상자의 원격 시스템 유형 선택 화면에서 SSH 전용을 선택하십시오.
  2. 연결 정보를 입력 한 후 Finish를 선택하십시오.
  3. 새 호스트에 연결하십시오. SSH 키가 이미 설정되어 있다고 가정합니다.
  4. 연결되면 호스트의 Sftp 파일 로 드릴 다운 하고 폴더를 선택한 다음 항목의 상황에 맞는 메뉴에서 원격 프로젝트 생성을 선택 하십시오 . (원격 프로젝트가 생성 될 때까지 기다립니다.)

올바르게 완료되면 이제 프로젝트 탐색기 및 이클립스 내의 다른 관점에서 액세스 할 수있는 새 원격 프로젝트가 있어야합니다. SSH 연결이 올바르게 설정되면 일반 SSH 인증 프로세스의 선택적 부분으로 비밀번호를 만들 수 있습니다. SSH를 통한 Eclipse를 사용한 원격 프로젝트가 작성되었습니다.


2
RSE는 여전히 까다 롭습니다. RSE의 가장 좋은 아이디어는 Eclipse가 SSH 연결을 통해 모든 것을 수행하는 것이지만 그 기능은 아직 작동하지 않습니다. 작동하는 기능에는 Linux 상자에서 설정해야하는 일부 서버가 포함됩니다.
Ioan

2
또한 RSE 직원은 버그 / 향상 보고서를 받고 싶어합니다.
Aaron Digulla

2
@Aaron-Makefile에서 rsync 솔루션을 시도했지만 기본적으로 키 시퀀스를 하나의 Ctrl + B로 바꿉니다. 문제는이 접근법으로 Eclipse에서 실행하거나 디버그 할 수 없다는 것입니다. RSE는 실제로 작업에서 좋은 도구처럼 들립니다. @Ioan, 작동하지 않는 것에 대해 자세히 설명해 주시겠습니까? RSE 위키는 SSH 파일 시스템과 원격 디버깅을 현재 기능으로 나열한 것 같습니다. 또는 이번 주 월요일에 사용해 보겠습니다.
코스

3
@AaronDigulla 안녕하세요, 솔루션은 훌륭하지만 원격 프로젝트를 빌드 할 때 Eclipse가 로컬로 컴파일하려고한다는 것을 알았습니다. 어쨌든 원격 컴퓨터에서 컴파일하고 실행할 수 있습니까?
shaoyl85

1
RSE에서 C / C ++ 인덱싱이 제대로 작동하지 않습니다. 인덱서는 누락 된 기호에 대해 불평합니다. 프로젝트 및 소스 파일이 로컬에 저장되어 있지만 RSE에서는 그렇지 않은 경우 잘 작동합니다. 어떤 아이디어?
Black_Zero

12

가장 간단한 방법은 Linux Box에서 Eclipse CDT를 실행하고 X11-Forwarding 또는 VNC와 같은 원격 데스크톱 소프트웨어를 사용하는 것입니다.

물론 이것은 Linux 상자에 Eclipse가 있고 상자에 대한 네트워크 연결이 충분히 빠른 경우에만 가능합니다.

이점은 모든 것이 로컬이기 때문에 동기화 문제가 없으며 플랫폼 간 문제가 발생하지 않는다는 것입니다.

상자에 일식이 없다면 SMB (또는 SSHFS)를 통해 Linux 작업 디렉토리를 공유하고 Windows 시스템에서 액세스 할 수 있지만 약간의 설정이 필요합니다.

둘 다, 특히 크로스 플랫폼 일 때 두 복사본을 갖는 것보다 낫습니다.


1
나는 리눅스 박스에 X11조차 없다고 두려워한다. :)
코스

2
@Kos, 가상 머신의 Linux 또는 Windows의 경우 X11 서버와 함께 물리적으로 앉아있는 곳에서 실행하려면 X11 서버가 필요하고 Linux 서버에서 실행하려면 Eclipse가 필요합니다. ssh는 네트워크 데이터를 터널링 할 수 있습니다. 경험을 돕기 위해 압축 + "-c 복어"를 찾을 수 있습니다.
Thorbjørn Ravn Andersen 5

간단히 말해서-원격 시스템에서 "headless Eclipse"를 지칭합니까? (자바를 가지고 있다면 :)). 가벼운 클라이언트 쪽 솔루션을 찾고 있었지만 원격 컴퓨터에서 일부 설정을하는 것도 옵션 일 수 있습니다.
코스

7
@ Kos : 아니오. X11은 다음과 같이 작동합니다 : 클라이언트와 서버가 있습니다. 서버는 모니터가 연결된 곳입니다. 모든 렌더링 및 표시를 수행합니다. 클라이언트 (이 경우 Eclipse)는 렌더링 명령을 서버로 보냅니다. 따라서 Windows에 X11을 설치하고 Linux 상자에서 Eclipse를 실행해야합니다. DISPLAY이클립스에서 서버의 위치를 ​​알 수 있도록 Linux에서해야 할 일은 변수를 설정하는 것 입니다.
Aaron Digulla

5
네트워크 속도가 빠르면 서버도 빨라지거나 Eclipse가 느리게 실행됩니다.
mattalxndr

6

나는 같은 장소에 있거나 FWIW Linux 호스트에서 samba 공유를 확인하고 메모장 ++를 사용하여 Windows 컴퓨터에서 로컬로 공유하는 편집을 끝내고 PuTTY를 통해 Linux 상자에서 컴파일했습니다. (우리는 Linux 호스트에서 편집기의 10 가지 버전의 편집기를 업데이트 할 수 없었으며 Java가 없었으므로 X11 전달을 포기했습니다.)

이제 ... Windows 호스트의 VM에서 최신 Linux를 실행하고 원하는 모든 도구 (예 : CDT)를 VM에 추가 한 다음 RTE와 유사한 chroot jail을 체크 아웃하고 빌드합니다.

그것은 엉뚱한 해결책이지만 믹스에 넣을 것이라고 생각했습니다.


3

내 솔루션은 sshfs를 사용하는 것을 제외하고 SAMBA 솔루션과 유사합니다. sshfs로 원격 서버를 마운트하고 원격 시스템에서 makefile 프로젝트를여십시오. 거기에서 가십시오.

이런 식으로도 수은에 GUI 프론트 엔드를 실행할 수있는 것 같습니다.

원격 코드 작성은 다음과 같이 간단합니다. ssh address remote_make_command

그래도 디버깅 할 적절한 방법을 찾고 있습니다. 아마도 gdbserver를 통해?


2

나는 2 년 전에 같은 문제가 있었고 다음과 같은 방식으로 해결했습니다.

1) Eclipse로 관리하지 않고 makefile로 프로젝트를 빌드합니다. 2) Eclipse 내에서 파일을 편집하기 위해 SAMBA 연결을 사용합니다. 3) 프로젝트 빌드 : Eclipse는 Linux에 대한 SSH 연결을 여는 makefile로 "로컬"make를 호출합니다. 주최자. SSH 명령 행에서 Linux 호스트에서 실행되는 매개 변수를 제공 할 수 있습니다. 리눅스 호스트에서 "실제"make를 호출하는 makeit.sh 쉘 스크립트를 해당 매개 변수에 사용합니다. 빌드하는 다른 대상은 Linux 호스트의 로컬 makefile-> makeit.sh-> makefile의 매개 변수로 제공 할 수도 있습니다.


훌륭하지만 "투명"이라고 할 수는 없습니다. 최소한 디버깅은 허용되지 않습니다. 또한 Samba 대신 RSync를 기반으로 할 수 있습니다 (원래 질문을 게시하기 전에했던 것입니다).
코스

2

나는 시도 ssh -X했지만 참을 수 없을 정도로 느렸다.

나는 또한 RSE를 시도했지만 Makefile을 사용하여 프로젝트를 빌드하는 것을 지원하지도 않았다 ( 내 답변을 게시 한 후에 이것이 변경되었다는 말을 들었지만 시도하지 않았다)

NX가 X11 전달보다 빠르다는 것을 읽었지만 작동시키지 못했습니다.

마지막으로, 내 서버가 X2Go를 지원한다는 것을 알았습니다 (링크에 설치 지침이없는 경우 설치 지침이 있음). 이제 나는 단지

  • 서버에서 Eclipse를 다운로드하여 압축을 풉니 다.
  • 로컬 컴퓨터 ( sudo apt-get install x2goclientUbuntu에)에 X2Go를 설치하십시오.
  • 연결을 구성하십시오 (호스트, ssh 키로 자동 로그인, Eclipse 실행 선택).

마치 빌드, 디버깅 및 코드 인덱싱을 포함하여 로컬 컴퓨터에서 작업하는 것처럼 모든 것이 가능합니다. 그리고 눈에 띄는 지연이 없습니다.



0

이 답변은 현재 bash 에서이 동기화 스크립트를 작성했기 때문에 두 개의 Linux 컴퓨터 (또는 Mac에서도 작동합니까?-Mac에서는 작동하지 않음)에만 적용됩니다. 그러나 단순히 래퍼 일뿐 git이므로 자유롭게 가져 와서 크로스 플랫폼 Python 솔루션 또는 원하는 것으로 변환하십시오.


이것은 OP의 질문에 직접 대답하지는 않지만 너무 가깝습니다.이 페이지에 방문한 다른 사람들의 질문에 답변 할 것이라고 보장합니다 ( 내가 직접 솔루션을 작성 하기 전에 여기에 왔을 때 포함 된 광산 ). 그래서 어쨌든 여기에 게시하고 있습니다.

나는 :

  1. 가벼운 Linux 컴퓨터에서 Eclipse와 같은 강력한 IDE를 사용하여 코드를 개발 한 다음
  2. 다른 더 강력한 Linux 컴퓨터에서 ssh를 통해 해당 코드를 빌드하십시오 (Eclipse 내부가 아닌 명령 행에서).

코드 "PC1"(개인용 컴퓨터 1)을 작성하는 첫 번째 컴퓨터와 코드 "PC2"를 작성하는 두 번째 컴퓨터를 호출하겠습니다. PC1에서 PC2로 쉽게 동기화 할 수있는 도구가 필요합니다. 나는 시도 rsync했지만 큰 repos에서는 엄청나게 느리고 많은 대역폭과 데이터가 필요했습니다.

어떻게해야합니까? 어떤 워크 플로를 사용해야합니까? 이 질문도 있다면, 내가 결정한 워크 플로가 있습니다. gitgithub과 같은 원격 저장소를 통해 PC1에서 PC2로 변경 사항을 자동으로 푸시 하여 프로세스를 자동화하는 bash 스크립트를 작성했습니다 . 지금까지는 잘 작동하며 매우 기쁘게 생각합니다. 각 PC는 기능적인 git repo를 유지하고 전체 동기화를 수행하는 데 훨씬 적은 대역폭을 사용하기 때문에 훨씬 더 빠르며 rsync내 의견으로는 더 신뢰할 수 있으므로 많은 데이터를 사용하지 않고도 휴대 전화 핫스팟을 통해 쉽게 수행 할 수 있습니다.

설정:

  1. PC1에 스크립트를 설치하십시오 (이 솔루션은 ~ / bin이 $ PATH에 있다고 가정합니다).

    git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
    cd eRCaGuy_dotfiles/useful_scripts
    mkdir -p ~/bin
    ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
    cd ..
    cp -i .sync_git_repo ~/.sync_git_repo
  2. 이제 방금 복사 한 "~ / .sync_git_repo"파일을 편집하고 사용자의 상황에 맞게 해당 매개 변수를 업데이트하십시오. 여기에 포함 된 매개 변수가 있습니다.

    # The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist* 
    # and you must have *already `git clone`d* a copy of your git repo into it!
    # - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will 
    #   happen on the local machine when what we need is the variable expansion from the remote machine. Being 
    #   explicit instead just avoids this problem.
    PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
    
    PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
    PC2_SSH_HOST="my_hostname"     # explicitly type this out; don't use variables
  3. PC1과 PC2 모두에서 동기화하려는 리포지토리를 복제하십시오.

  4. PC1과 PC2 모두에서 원격 리포지토리로 밀고 당길 수 있도록 ssh 키가 모두 설정되어 있는지 확인하십시오. 유용한 링크는 다음과 같습니다.
    1. https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
    2. https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
  5. ssh 키가 모두 PC1에서 PC2로 ssh로 설정되어 있는지 확인하십시오.
  6. 이제 cdPC1의 git repo 내의 디렉토리로 이동하여 다음을 실행하십시오.

    sync_git_repo_from_pc1_to_pc2
  7. 그게 다야! 약 30 초 후에 모든 것이 PC1에서 PC2로 마술처럼 동기화되며, 디스크의 어느 컴퓨터에서 어떤 일을하고 있는지, 어디에서 무엇을하고 있는지를 알려주는 출력물이 계속 출력됩니다. 커밋되지 않은 것을 덮어 쓰거나 삭제하지 않기 때문에 안전합니다. 대신 먼저 백업합니다! 작동 방식은 아래를 참조하십시오.

이 스크립트가 사용하는 프로세스는 다음과 같습니다 (예 : 실제로 수행중인 작업).

  1. PC1에서 : 커밋되지 않은 변경 사항이 PC1에 있는지 확인합니다. 그렇다면 현재 분기에서 임시 커밋을 커밋합니다. 그런 다음 원격 SYNC 분기로 강제 푸시합니다. 그런 다음 로컬 브랜치에서 수행 한 임시 커밋을 커밋 해제 한 다음 스크립트를 호출 할 때 이전에 준비된 파일을 준비하여 로컬 git repo를 정확히 상태로 되돌립니다. 다음으로, rsync스크립트를 PC2로 복사하고 PC2 ssh에게 PC2 작업을 수행하는 특별한 옵션으로 스크립트를 실행하도록 PC2에 지시 하는 호출을 수행합니다.
  2. PC2의 기능은 다음과 같습니다 cd. 리포지토리에 저장하고 커밋되지 않은 로컬 변경 사항이 있는지 확인 합니다. 이 경우 현재 분기에서 분기 된 새 백업 분기 (샘플 이름 : my_branch_SYNC_BAK_20200220-0028hrs-15sec<-YYYYMMDD-HHMMhrs--SSsec)를 만들고 DO BACKUP OF ALL 과 같은 커밋 메시지를 사용하여 해당 분기에 커밋되지 않은 변경 사항을 커밋합니다. PC2에서 커밋되지 않은 변경 사항 (대상 PC / 빌드 머신). 이제 SYNC 분기를 체크 아웃하여 로컬 시스템에없는 경우 원격 저장소에서 가져옵니다. 그런 다음 원격 리포지토리에서 최신 변경 내용을 가져오고 로컬 SYNC 리포지토리가 원격 SYNC 리포지토리와 일치하도록 강제 재설정합니다. 이것을 "하드 풀"이라고 부를 수 있습니다. 그러나 PC2에서 로컬로 수행 한 커밋되지 않은 변경 사항을 이미 백업했기 때문에 안전합니다.
  3. 그게 다야! 스크립트가 모든 자동 커밋 및 작업을 처리하므로 깨끗한 작업 디렉토리를 보장하지 않고도 PC1에서 PC2로 완벽한 사본을 만들었습니다! 빠르며 거대한 리포지토리에서 매우 잘 작동합니다. 이제 저장소가 수십 기가 바이트이고 시간이 있더라도 필요한 경우 휴대 전화의 wifi 핫스팟을 통해 다른 컴퓨터에서 쉽게 빌드하거나 테스트하는 동안 한 컴퓨터에서 선택한 IDE 를 쉽게 사용할 있습니다. 그리고 자원이 제한되어 있습니다.

자원:

  1. 전체 프로젝트 : https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
    1. 이 프로젝트 내의 소스 코드 자체에서 더 많은 링크와 참조를보십시오.
  2. "하드 풀"을 호출하는 방법 : "git pull"을 사용하여 로컬 파일을 덮어 쓰려면 어떻게합니까?

관련 :

  1. 움직일 때 컴퓨터간에 git repository 동기화?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.