--- 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を`クライアント`、踏み台用の外部サーバを`外部サーバ`、研究室の踏み台サーバを`踏み台`、接続先のサーバを`サーバ`と記載する。 ![ネットワーク](https://i.imgur.com/NQHR2u1.jpg "ネットワーク") クライアントは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トンネルを貼っておくことで、簡単に研究室のサーバに接続できるようになった。