# Web Based SSH Client

# 소개

다들 PuTTy라는 프로그램은 한번씩 사용하셨을 것 같습니다.

sshwift 및 wetty는 PuTTy의 Web 버전으로 이해하시면 됩니다.

별도 SSH 클라이언트 프로그램 없이 웹브라우저로 원하시면 서버에 바로 SSH 접속이 가능해 매우 편리 합니다.

**1. sshwifty**

[![sshwifty.jpg](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/scaled-1680-/tlyWQPNp90Qg6Cvg-sshwifty.jpg)](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/tlyWQPNp90Qg6Cvg-sshwifty.jpg)

**2. wetty**

[![wetty_snapshot.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/Yxk8FGwyga4irzMY-wetty-snapshot.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/Yxk8FGwyga4irzMY-wetty-snapshot.png)

# Nexterm (추천)

"/volume1/docker/nexterm" 디렉토리를 생성 후 아래의 yml을 실행합니다.

터미널에서 아래 명령을 실행해 32진수 임의의 "ENCRYPTION\_KEY" 값을 생성합니다.

```bash
openssl rand -hex 32
```

값을 복사해 기록해 줍니다.

아래와 같은 yaml을 작성해 도커를 설치 합니다.

```yaml
services:
  nexterm:
    container_name: Nexterm
    image: germannewsmaker/nexterm:latest
    healthcheck:
      test: ["CMD-SHELL", "nc -z 127.0.0.1 6989 || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    ports:
      - 6989:6989
    volumes:
      - /volume1/docker/nexterm:/app/data:rw
    environment:
      - ENCRYPTION_KEY=복사해 놓은 키값
      - NODE_ENV=production
    restart: on-failure:5
```

[![nexterm1.jpg](https://wiki.dhcloud.me/uploads/images/gallery/2025-01/scaled-1680-/qnYF40RjWfxUt0Ph-nexterm1.jpg)](https://wiki.dhcloud.me/uploads/images/gallery/2025-01/qnYF40RjWfxUt0Ph-nexterm1.jpg)

# sshwifty

ssh에서 아래 docker 명령어를 실행합니다.

사용하는 포트는 8182입니다.

```shell
docker run -d --name=sshwifty \
-p 8182:8182 \
--restart always \
niruix/sshwifty
```

IP:8182로 접속하고, "+"를 눌러 연결할 서버 정보를 입력합니다.

[![sshwifty2.jpg](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/scaled-1680-/Rb7xDB8J2loCEeXr-sshwifty2.jpg)](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/Rb7xDB8J2loCEeXr-sshwifty2.jpg)

"host"에 ssh서버 ip 또는 url을 넣고, ":포트"를 입력 합니다.

[![sshwifty3.jpg](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/scaled-1680-/13vURrBBciwt1ABg-sshwifty3.jpg)](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/13vURrBBciwt1ABg-sshwifty3.jpg)

ssh 서버 정보가 입력되면, "Known remotes"에 바로가기 연결이 생성 됩니다.

[![sshwifty4.jpg](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/scaled-1680-/hY9FTqVNmYGXSORU-sshwifty4.jpg)](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/hY9FTqVNmYGXSORU-sshwifty4.jpg)

ssh에 연결된 화면 입니다.

[![sshwifty.jpg](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/scaled-1680-/tlyWQPNp90Qg6Cvg-sshwifty.jpg)](https://wiki.dhcloud.me/uploads/images/gallery/2023-12/tlyWQPNp90Qg6Cvg-sshwifty.jpg)

# wetty (종료)

<s>사용하자고 하는 Docker Image는 "svenihoney-wetty" 입니다.</s>

<s>해당 Image는 Docker REPO (Hub)에서 현재는 내려간 상태 입니다.</s>

<s>다른 Wetty Docker가 많이 있지만 SSL 설정과 셋팅이 다소 복잡하여 제 경우 "svenihoney-wetty"만 계속 사용 중에 있습니다.</s>

<s>아래는 Backup 받아 놓은 "svenihoney-wetty" Image이며 다운로드 받아 사용하시면 됩니다.</s>

<p class="callout success"><s>[https://cloud.dhcloud.me/s/MFiDtWJPK2eKgHs](https://cloud.dhcloud.me/s/MFiDtWJPK2eKgHs)</s></p>

<s>Portainer를 통해 설치를 진행할 예정입니다.</s>

<s>Portainer에 접속 후 "Images &gt; Import"로 이동 합니다.</s>

<s>[![wetty1.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/v4riyVSMZu4dYQIk-wetty1.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/v4riyVSMZu4dYQIk-wetty1.png)</s>

<s>"Advanced Menu" 눌러 "Simple Mode"로 전환 합니다.</s>

<s>[![wetty2.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/USGf4Ku7aJ5pRhf3-wetty2.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/USGf4Ku7aJ5pRhf3-wetty2.png)</s>

<s>"Simple Mode"에서 "Select file"을 누르고 미리 다운로드 받은 "svenihoney-wetty(latest).syno.tar" 파일을 업로드 합니다.</s>

<s>[![wetty3.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/4OKvQze1ziXzOkGD-wetty3.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/4OKvQze1ziXzOkGD-wetty3.png)</s>

<s>"Image"에서 정상 업로드 여부를 확인합니다. 업로드된 Docker이미지 명은 "**<span style="color:rgb(224,62,45);">svenihoney/wetty:latest</span>**" 입니다.</s>

<s>[![wetty6.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/z99O4zRQF8lK5PXJ-wetty6.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/z99O4zRQF8lK5PXJ-wetty6.png)</s>

<s>이제는 Container를 설치할 차례 입니다.</s>

<s>Portainer의 "Container &gt; Add Container"를 선택 합니다.</s>

<s>[![wetty4.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/Iy1bClelIr6pb1As-wetty4.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/Iy1bClelIr6pb1As-wetty4.png)</s>

<s>여기서도 위와 같게 "Advanced Menu" 눌러 "Simple Mode"로 전환 합니다.</s>

<s>[![wetty5.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/KCFa096Gjv7JhAYg-wetty5.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/KCFa096Gjv7JhAYg-wetty5.png)</s>

<s>"Simple Mode"에서 "Name"에는 원하시는 컨테이너 이름과, "Image"에는 업로드한 Image이름인 "**<span style="color:rgb(224,62,45);">svenihoney/wetty:latest</span>**"를 입력 후 하단의 "Deploy the container"를 눌러줍니다.</s>

<s>[![wetty7.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/5MexLsOYrGp2Fbcu-wetty7.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/5MexLsOYrGp2Fbcu-wetty7.png)</s>

<s>생성된 "wetty" Container로 들어가서 "Duplicate/Edit"를 눌러줍니다.</s>

<s>[![wetty8.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/H3546xEl1AeybW9U-wetty8.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/H3546xEl1AeybW9U-wetty8.png)</s>

<s>중간쯤으로 내려가면 "Manual network port publishing" 항목이 있습니다.</s>

<s>여기서 "publish a new network port"를 누르면 수동으로 네트워크 Port를 Mapping하는 입력창이 나옵니다.</s>

<s>"host"에는 SSH의 Port 번호 (별도 수정하지 않으셨다면 "22"), "Container"에는 Wetty가 사용하는 Port "3000"을 입력하고</s>

<s>TCP를 선택 합니다.</s>

<s>[![wetty9.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/ffi2Mnd6P1YbOdwJ-wetty9.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/ffi2Mnd6P1YbOdwJ-wetty9.png)</s>

<s>하단쪽의 "Env"로 이동하고 아래 3개 부분을 설정하고 "Deploy the container"를 눌러 Container를 재구성해 줍니다.</s>

<p class="callout success"><s>REMOTE\_SSH\_SERVER=**<span style="color:rgb(224,62,45);">SSH서버 IP</span>**</s>  
<s>REMOTE\_SSH\_PORT=<span style="color:rgb(224,62,45);">**외부에서 접속할 Port**</span></s>  
<s>WETTY\_PORT=<span style="color:rgb(224,62,45);">**3000**</span></s>  
</p>

<s>[![wetty10.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/jtTlJX6gvoPtzb1s-wetty10.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/jtTlJX6gvoPtzb1s-wetty10.png)</s>

<s>마지막으로 접속은 "**<span style="color:rgb(224,62,45);">IP:\[REMOTE\_SSH\_PORT\]</span>**" 으로 진행하시면 됩니다.</s>  
<s>(위 예제 경우 "192.168.1.200:9293")</s>

<s>[![wetty11.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/hXM7QRhl5xND5QrT-wetty11.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/hXM7QRhl5xND5QrT-wetty11.png)</s>

<s>SSH 개방에 대한 외부 노출이 걱정될 경우 Nginx Proxy Manager의 Proxy Host를 통해</s>

<s>"Access List"에 인증정보를 넣어 접속시에 2차 인증 절차를 추가하실 수 있습니다.</s>

<s>[![wetty_auth.png](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/scaled-1680-/jCask0ro1xE4NKNr-wetty-auth.png)](https://wiki.dhcloud.me/uploads/images/gallery/2023-06/jCask0ro1xE4NKNr-wetty-auth.png)</s>

<s>앞서 안내해 드린 사항과 같이 "svenihoney/wetty"는 현재 게시가 중단된 이미지 이며, Watchtower 구동 시 게시 중단 사유에 따른 Event Log가 발생 됩니다.</s>

<s>Watchtower를 사용하신다면 아래와 같은 "예외처리"를 추천 드립니다.</s>

<p class="callout success"><s>[https://wiki.dhcloud.me/books/watchtower/page/94f6d](https://wiki.dhcloud.me/books/docker-updater-watchtower/page/94f6d)</s></p>