mac(Sierra)とwindows10のssh接続＆tunneling


※他の情報を十分にサーベイした上、自己責任で行ってください。

**目標**

外出先から自宅 mac に接続し, jupyter notebook でコーディングができる。

**環境**

概要のみ

mac
- OS: macos(Sierra)

windows
- OS: Windows10 Home Edition

## mac（Sierra）をwindows10から操作する。

ssh 接続のみで十分であったが、vnc も試してみた。

### ローカルネットワーク内の ssh 接続 & ssh tunneling で vnc 接続

#### サーバ側（mac）

**sshのポート変更**

```bash
sudo vim /etc/services
```
```vim
77 ssh              22/udp     # SSH Remote Login Protocol$
78 ssh              22/tcp     # SSH Remote Login Protocol$
```
の22を、未使用のポート番号に変更。（未使用ポートの確認はググる）

**IPアドレスの確認**

```bash
ifconfig
```

でわかるのでメモ。

**ssh公開鍵の生成**

```bash
cd ~/.ssh
ssh-keygen -t rsa
```

出てくる項目は y か Enter でスキップ。

公開鍵を編集する。

```bash
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
rm id_rsa.pub
```

秘密鍵を配置する。

```bash
chmod 600 id_rsa
```

id_rsaはクライアント側に送信する。

**sshの設定**

```bash
sudo vim /etc/ssh/sshd_config
```

以下のように編集（#外したり、yesをnoにしたり）

```vim
PeimitRootLogin no

PasswordAuthentication no

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile     .ssh/authorized_keys
```

**リモートログインの設定**

[システム環境設定]>[共有]
で、リモートログインをオンにする。

ここでアクセスを許可されたユーザがクライアント側でログインする際のアカウントになる。

**画面共有の設定**

上記と同じ画面で、画面共有をオンにする。

**日本語文字化け対策**

```bash
sudo vim ~/.bash_profile
```

以下を追記

```vim
export LANG=ja_JP.UTF-8
```

設定を反映

```bash
source ~/.bash_profile
```

#### クライアント側（windows）

[RLogin](http://nanno.dip.jp/softlib/man/rlogin/) をインストール

- サーバのIPアドレス
- アカウント名、パスワード
- SSH認証キー（id_rsa）をインポート

以上でsshが接続できる。

**ssh tunneling による vnc**

[ファイル]>[サーバに接続]  
で先ほどの設定ファイルを選択し、  
[編集]  
を押す。

[サーバ]>[プロトコル]>[ポートフォワード]  
を選択。新規を作成し、以下のように設定

- Listened
    - Hostname: localhost
    - Port: 33333(適当)
- Connect
    - Hostname: サーバのIPアドレス
    - Port: 5800

5800はvncのポート番号。

これを保存し、ssh再接続。

[UltraVNC](http://www.uvnc.com/) をインストールし、接続先に  
127.0.0.1::33333  
を入力、アカウントのパスワードを入力すると接続できる。

### 外部ネットワークの ssh 接続 & ssh tunneling で vnc 接続

[このサイト](http://www.cman.jp/network/support/go_access.cgi)からグローバルIPアドレスを確認してメモしておく。

環境によっては定期的に変わってしまうので、[ここらへん](https://ieserver.net/cgi-bin/dip.cgi)などで固定IPを取得しておいてもよい。

**ルーターの設定**

ルーターの設定画面は、機種によってIPアドレスが異なる。例えば、ブラウザで[192.168.0.1](192.168.0.1)等につなぐと設定画面が現れる。

それぞれの機器のポートマッピング設定で、サーバIPのsshのIPを開く。

**クライアントの設定**

内部ネットワークの設定でサーバIPを入れたところに、グローバルIPを上書きすればOK。

## Python環境の構築（Homebrew）

macにはネイティブで python2.7 がインストールされている。

執筆時点では、Homebrewのデフォルトpythyonが3系になっている。

### Python3,pip

```bash
brew install python
```

### venv

```bash
python -m venv env1

# activate
source env1/bin/activate

# deactivate
deactivate
```

### jupyter notebook

```bash
pip install jupyter

# cinfig file emerge
jupyter notebook --generate-sshd_config
sudo vim ~/.jupyter/jupyter_notebook_config.py
```

```vim
# 起動してもブラウザが自動起動しないようにする。
c.NotebookApp.open_browser = False
```

パスワード設定（jupyter5.0以降）

```bash
jupyter notebook password
```

### nbextended

```bash
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
```

### ssh tunneling　の接続

vncと同じことを、8888ポートに行えばよい。
ただし、クライアント側のポートも、未使用の別ポートに変えること。たとえば、

- Listened
    - Hostname: localhost
    - Port: 33334(適当)
- Connect
    - Hostname: サーバのIPアドレス
    - Port: 8888

と設定すれば、設定でssh接続し、クライアントブラウザで

127.0.0.1:8888

を打つと Jupyter に接続できる。