【sshサーバー】ubuntu sshサーバー構築〜LAN内外からのssh接続まで

#はじめに
自宅に自作PCのubuntu環境を用意したため、ssh接続を試みた。
ホスト環境へのsshサーバーの準備から、LAN内外からのアクセス方法までを学習したため、その内容を整理する。
参考になったと思った方は、LGTMクリックいただけると幸いですm(__)m


#流れ
1. ホスト側(ubuntu)のsshサーバー導入
2. クライアント側での鍵の生成
3. ホスト側での公開鍵の設定
4. LAN内からのssh接続
5. LAN外からのssh接続

#1. ホスト(ubuntu)のsshサーバー設定

ssh-serverの導入

```bash
sudo apt install openssh-server
```

sshd_configファイルで設定の変更

```bash
sudo vim /etc/ssh/sshd_config
```
sshd_config = sshデーモンの設定ファイル（外部からssh接続されたときの設定）
ssh_config = ssh接続の設定ファイル（外部へssh接続するときの設定）

sshd_configファイルに以下内容を追加

```bash
#パスワードによる認証を許可
PasswordAuthentication yes
#後続プロセスのため一時的に許可を与える
```

設定を反映させるためにサーバを再起動

```bash
service sshd restart
```


#2. クライアント側での鍵の生成 

公開鍵と秘密鍵を生成
（わかりやすいように鍵の名前をubuntu_homeに変更）

```bash
ssh-keygen -t rsa
#Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa):/Users/xxxx/.ssh/ubuntu_home
#以降の問いはEnterでOK
```

公開鍵をホスト側へコピー（以下コマンドにより、公開鍵がホストの「~/.ssh」ディレクトリに格納される）

```bash
scp ~/.ssh/ubuntu.pub  <ユーザー>@<ホストIPアドレス>:~/.ssh
```

※1 ホスト側のIPアドレスは「hostname -I」のbashコマンドで確認できる
※2 scp = Secure Copy


#3. ホスト側での公開鍵の設定

```bash
#authorized_keysへの公開鍵の書き込み
cd ~/.ssh
cat ubuntu.pub >> authorized_keys
rm ubuntu.pub

#権限の変更
cd ~
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
```

セキュリティー強化のため、秘密鍵でのアクセスに限定

```bash
#sshデーモンの設定変更
sudo vim /etc/ssh/sshd_config
```

```bash
#パスワードによるアクセスを禁止
PasswordAuthentication no
```

```bash
#設定を反映させるためにサーバを再起動
service sshd restart
```

#4. LAN内からのssh接続

ローカルIPの固定
wifi設定の歯車マークでIPアドレスを手動で設定する
![Screenshot from 2020-12-16 02-43-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861809/494e7288-469d-20f4-8532-12d7901c3eb1.png)

ゲートウエイはルータのIPアドレスであり、PCのlocalIPアドレスの最後の数字を1に置き換えることで設定できる

以下コマンドでssh接続完了！

```bash
ssh -i ~/.ssh/home_ubuntu -l <ユーザー名> <ローカルIPアドレス>
```


#5. LAN外からのssh接続

##① port開放
ルーターの設定サイトにログイン

local IPアドレスの最後の数字を1に置き換えることでルータにアクセスできる(以下例)
PCのIPアドレス    = http://192.168.10.114
ルータのIPアドレス = http://192.168.10.1

私のルータの場合以下のような設定画面が表示されます。
![Screenshot from 2020-12-16 02-19-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861809/1d9dff8d-86c7-691d-d7ce-466abfcb120a.png)

ポートマッピング設定をクリック
![Screenshot from 2020-12-16 02-36-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861809/3ae779ea-a814-64a0-f0ad-df313cc83a19.png)

NATをエントリする
![Screenshot from 2020-12-16 02-56-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861809/2b38c305-9af4-f7cd-434a-214c109e287a.png)
※あくまでも私のルータの例であり、細かい内容はルータごとに異なる

##② ドメインの取得
MyDNSというサイトでドメインを取得します．右上のjoin usから登録しログイン
[https://www.mydns.jp/](https://www.mydns.jp/)

DOMAIN INFOからドメインを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861809/567292aa-c56a-1c80-a8d8-87e312506adb.png)

取得したドメインに対し，IP ADDR DIRECTから先程調べたグローバルIPアドレスをIPv4のところに入力し、ドメインとグローバルIPを紐づける
![Screenshot from 2020-12-16 04-03-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861809/2adc5e0e-2be9-344e-4dc0-4b60a7f8ff0e.png)


グローバルIPアドレスの確認方法

```bash
curl inet-ip.info
```


##③ グローバルIPの自動更新
グローバルIPは固定IPでないと自動更新されてしまうのでDDNSで取得したドメインとの紐付けを再度行う必要がある

それを今回はcronで自動的に実行する

```bash
crontab -e
```

```bash
#以下の１行を追加して保存
#これで10分おきにMyDNSに対してHTTPリクエストを発行する
*/10 * * * * wget -q -O /dev/null http://(mydns.jp のマスターID):(mydns.jp のパスワード)@www.mydns.jp/login.html
```

##④ ヘアピンNAT回避
同一のネットワーク内からグローバルIPにアクセスしようとするとルータが対応していないと拒否される
以下で設定しておけば，拒否されなくなるので登録する

```bash
sudo vim /etc/hosts
```

```bash:/etc/hosts
#以下の１行を追加して保存
<固定したサーバのローカルIP> <MyDNSで取得したドメイン名>
```


##⑤ 自宅サーバへのSSH
以下で自宅サーバへつながれば完了

```bash
ssh -p 5504 -i ~/.ssh/home_ubuntu ドメイン名
```

また、.ssh/configファイルにssh接続の条件を記載しておけば、簡単にssh接続できる

```:~/.ssh/config
Host home-ubuntu
  HostName home-ubuntu.mydns.jp
  IdentityFile ~/.ssh/home_ubuntu
  User shota
  Port 5504
  TCPKeepAlive yes
  IdentitiesOnly yes
```

以下コマンドだけで接続可能！

```bash
ssh home-ubuntu
```

参考になったと思った方は、LGTMクリックいただけると幸いですm(__)m

#参考
・ubuntu自宅サーバにsshで外部からアクセス
http://frute.hatenablog.com/entry/2018/11/19/003056
・Ubuntu 18.04 LTSで固定IPアドレスを設定する方法【デスクトップ編】
https://linuxfan.info/ubuntu-1804-desktop-static-ip-address
・SSH Tips
https://qiita.com/syui/items/cb2bf66ceb94e92058ff