---
title: 研究室のサーバに接続したい
description: 研究室のサーバに接続するのが面倒だから、簡単につながるようにした
tags: Linux, CloudGarage
langs: ja-jp
GA: UA-107906006-2
---
# 研究室のサーバに接続したい
## はじめに
:::success
この記事は、[Kogakuin Univ Advent Calendar 2018](https://adventar.org/calendars/2917 "Kogakuin Univ Advent Calendar 2018")の24日目です。
- prev teapot [工学院大学のVPNを使いやすくする](https://hackmd.io/s/ryBc7p3eN "工学院大学のVPNを使いやすくする")
- next u+ :pro: [工学院生を長きに渡り苦しめたアイツの存在を薄くする](# "工学院生を長きに渡り苦しめたアイツの存在を薄くする")
:::
こんにちは。
今年ももう終わりに近づき、Advent Calendarも今日を含めて後2日です。
自分を始めとした多くの3年生の皆さんはすでに研究室に配属され、研究を始めていたり、研究室の課題に追われていたりするかと思います。
私の研究室では2つの課題が出ており、[ネットワークシミュレータ](https://github.com/grncbg/ANSL-NetworkSimulator "grncbg/ANSL-NetworkSimulator")を作ったり、NS-3を動かしたりしています。
その際、研究室内のサーバでプログラムを実行する必要があるのですが、サーバに接続するのが面倒だったため、より簡単に接続する方法を考えた結果がこの記事です。
分かる人には自明なことしか書いていないので、そういう人は読み飛ばしてもらえればと思います。
既に察している方も居るかと思いますが、この記事はもともと昨日の記事と合わせて1つの記事にするつもりでしたが、時間がなかったので分割しました。
## 概要
研究室に配属され、研究室のサーバで開発を行うことになったが、接続するのが面倒なのでもっと簡単に接続したい。
踏み台用のサーバを用意し、踏み台サーバの特定のポートに接続することで、研究室のサーバに接続できるようにした。
## 背景
研究室に配属され、研究室のサーバで開発を行うことになったが、接続するのが面倒。具体的には以下の手順である。
1. 工学院大学のVPNに接続する
Pulse SecureからVPNに接続する。
GUIを動かすのが面倒。
1. 適切にネットワークの設定をする (Proxyを通す or ルーティングの設定をする)
- Proxyを通す
工学院生お馴染みのいつものプロキシの設定をする。
ソフトウェアごとに設定が必要だったり、外部へのSSHができなくなったりして面倒。
- ルーティングの設定をする
学外だったらVPNを通さないようルーティングの設定をする。
SSHできるので人権はある。
1. 研究室の踏み台サーバに接続する
踏み台サーバにSSHで接続する。
1. 研究室のサーバに接続する
踏み台サーバを経由して研究室のサーバに接続する。
## 目的
接続をもっと簡単にできるようにする。その際以下の条件を満たしたい。
- 1コマンドで接続ができる
手間を減らすため
- Proxy・Routing等、クライアントのネットワークの設定はいじらない
他の操作に影響を及ぼさないため
## 手法
### 環境
自宅のPCから外部のサーバを踏み台とし、研究室のサーバに接続する。
以下接続元の手元のPCを`クライアント`、踏み台用の外部サーバを`外部サーバ`、研究室の踏み台サーバを`踏み台`、接続先のサーバを`サーバ`と記載する。

クライアントはUbuntu 18.10、外部サーバはUbuntu 18.04、その他のサーバはsshでつなぐだけなのでOSには依存しない。
### 外部サーバの用意
Cloud Garageの無料インスタンスを使ってないことを思い出したので、今回はCloud Garageに構築する。Cloud Garageは、開発者であれば申請を出すと3インスタンス無料で使えるのでおすすめ。([開発者向けインスタンス無償提供制度](https://cloudgarage.jp/dap/ "開発者向けインスタンス無償提供制度"))
私は家以外からでもアクセスしやすいように外部に設置したが、LAN内に置いてもいいと思う。
サーバの初期設定等に関しては特に記載しない。(もしかしたら追記するかも)
次の項目からは、初期設定が完了し、鍵認証によってクライアント-外部サーバ間でssh接続ができている前提で話を進める。
### VPN接続
外部サーバに接続し、VPNの設定を行う。
VPNの設定に関しては[昨日の記事](https://hackmd.io/s/ryBc7p3eN "工学院大学のVPNを使いやすくする")を参照されたい。何も考えずにPulse SecureでVPNを貼ろうとすると、デフォルトゲートウェイが上書きされてSSHが切れるので注意(1敗)。
#### VPNの永続化
```bash
sudo systemctl enable vpn
```
### SSHトンネル
#### 設定
外部サーバ-踏み台-サーバ間でSSHトンネルを張る。
外部サーバでSSHトンネルの設定をする。
`~/.ssh/config`にSSHの設定を書く。SSH用の鍵は事前に作成し、踏み台に登録しておく。今回は鍵のパスは~/.ssh/ed25519とする
```
Host tunnel
ExitOnForwardFailure yes
Hostname <踏み台のIP>
IdentityFile ~/.ssh/id_ed25519
LocalForward *:<トンネルにつなぐためのポート> <サーバのIP>:<サーバのSSHのポート>
Port <踏み台のSSHのポート>
ServerAliveInterval 60
StrictHostKeyChecking no
User <踏み台のSSHのユーザ>
```
`<トンネルにつなぐためのポート>`は、外部サーバからサーバに接続するためのポート(自由に設定可能)。今回は10022。
`User`は、外部サーバから踏み台にSSHで接続する時のユーザ。`Port`も同様。
必要であれば、トンネル接続用のポートを開けておく。特に、CloudGarageを使った場合には、コントロールパネルでもポートを開ける必要がある(1敗)。
#### 動作確認
外部サーバで`ssh -N tunnel`を実行した状態で、クライアントから外部サーバのトンネルにつなぐためのポートにsshで接続すると、サーバに接続できることを確認する。
### Systemd
`/etc/systemd/system/tunnel.service`に設定を書く。
```bash
[Unit]
Description=SSH Tunnel
After=network.target vpn.service
[Service]
User=<sshを実行するユーザ>
ExecStart=/usr/bin/ssh -N tunnel
RestartSec=5
Restart=always
[Install]
WantedBy=multi-user.target
```
`<sshを実行するユーザ>`は外部サーバ上でsshコマンドを実行するユーザ。接続先の踏み台のユーザではない。
Systemdで起動できることを確認する。
```bash
sudo systemctl daemon-reload
sudo systemctl start tunnel
```
を実行すると、クライアントから接続できるはずである。
#### 永続化
```bash
sudo systemctl enable tunnel
```
## まとめ
SSHトンネルを貼っておくことで、簡単に研究室のサーバに接続できるようになった。