04 Jan 2018, 15:35

自宅のUbuntuサーバに外からsshでアクセスする

自宅に高価なパソコンを購入したので、どうせなら外出先でもアクセスしたい。

なので、外部から自宅サーバにsshする方法を調べて設定してみた。

環境

  • ソフトバンク光 BBユニット
  • Ubuntu 16.04 LTS (サーバもクライアントも)

ssh鍵認証でログインする

第一ステップとして、ローカルネットワーク、つまり自宅内のネットワークでssh接続できることを目指す。パスワード認証ではなくて、ssh鍵認証をする。ハッキングが怖いので。

これは、5年前!に書いた自分の記事が役に立った。整理しつつ、再掲。

サーバ側の設定

サーバ側にssh serverを インストールする。

sudo apt install openssh-server

これでOk.簡単です。次にsshの設定をいじる。 /etc/ssh/sshd_configを管理者権限で編集

sudo nano /etc/ssh/ssh_config

//ルートでのログイン禁止
PermitRootLogin no

//RSA認証の有効化
RSAAuthentication yes

//パスワードによる認証を許可
PasswordAuthentication yes

//空のパスワードは拒否
PermitEmptyPasswords no

//チャレンジレスポンス認証を不許可
ChallengeResponseAuthentication no

設定の反映のために再起動。

systemctl restart sshd

クライアント側の設定

クライアントの設定。といってもsshコマンドはデフォルトで入っている。

// 認証公開鍵の作成
$ ssh-keygen -t rsa

// いくつか質問されるのでEnter連打。

クライアントの公開鍵をサーバに送ります。安全のために、ここではscpコマンドを使うのがよいでしょう。

$ scp ~/.ssh/id_rsa.pub  tsu-nera@XXX.XXX.XXX.XXX:

再びサーバ側の設定

scpで送った鍵を保存する。

$ cat id_rsa.pub >> .ssh/authorized_keys
$ rm id_ras.pub

$ chmod 600 .ssh/authorized_keys

再度、sshd_configの設定を編集.

//パスワードによる認証を許可しない
PasswordAuthentication no

再起動して終了。

sudo systemctl restart sshd

ローカルIPアドレスを固定する

ローカルIPアドレス(プライベートIPアドレス)は、DHCP機能によって自動的に振られるので、これを固定IPアドレスにする。

固定の方法なのだけれども、ここでかなりハマった。以下の記事を参考に/etc/network/interfacesを覗いてみたのだけれども・・・

あれ、Loopbackのnicしかないyo!!

ということで、ここでハマった。いろいろ調べてみると、15.xからここらへんの仕様変更があったようで、名前が記事とは違うらしい。名前どころか、仕組みも違うみたい。詳しくは調べきれていないのだが、Network Managerというserviceに置き換わろうとしていて、そのフロントエンドが nm-appletというアプリだそうだ。

というわけで、nm-appletをいじる。これは、右上のネットワーク接続を示すアプレットのこと。これで、まずは接続情報というところをチェックする。Ipv4の欄の

  • IPアドレス
  • ブロードキャストアドレス
  • サブネットマスク
  • デフォルトゲートウェイ

をチェックしてメモする。そして、接続を編集するを選択して、現在接続中の通信を選択して編集を押す。Ipv4設定を選択し情報を以下のように入力する。

ここでは、192.168.3.5を固定IPアドレスにした。これでIPは固定になるはず(自信ないです。。。)

ssh port を 22から 10022に変更する

ssh は port 22 なのだけれども、これを変更する。ハッカーに攻撃されないようにね。

設定ファイルを開き、下記のように変更する。

$ sudo nano /etc/services

//前
ssh              22/udp     # SSH Remote Login Protocol
ssh              22/tcp     # SSH Remote Login Protocol

//後
ssh              10022/udp     # SSH Remote Login Protocol
ssh              10022/tcp     # SSH Remote Login Protocol

グローバルIPアドレスでアクセス

さあ、ローカルネットワークではこれでssh接続できるようになった。次はグローバルだ。まずは、自分のグローバルIPアドレスを以下から調べる。

ソフトバンク光BBユニットの設定からポート開放設定

自分の家のルータの設定を変更して、上で設定した10022番ポートがホストに回してくれるよう設定する。

  • http://172.16.255.254/ に接続、user/userでログイン
  • 詳細設定を開く -> ポート転送
  • 有効/無効 -> 有効
  • プロトコル -> tcp
  • WAN/LAN側ポート両方 -> 10022-10022
  • 転送先IPアドレス -> 自分のローカルipアドレス

ルーターを再起動する。

No-IPを使ってグローバルIPアドレスを DDNSで追跡する

グローバルIPアドレスは気まぐれで変更されてしまう。なので、変更を追跡してくれるサービスを利用する。DDNS(Dynamic DNS)というらしい。No-IPというサービを利用する。

これに登録して、fox10225fox.ddns.netというドメインを取得した。

最後の仕上げ

以下のコマンドで、アクセスできれば目標達成。

ssh -p 10022 tsu-nera@fox10225fox.ddns.net

ちなみにヘアピンNATに注意

同一ネットワーク内からグローバルIPにアクセスしようとすると、アクセスが失敗する。これは、ヘアピンNATと呼ばれているルーターの仕組みの問題。

ヘアピンNAT対応していないルータをつかっていると、どんなに設定をいじってもアクセスが失敗する(これでとても時間をつかった)

/etc/hostsを編集する方法がネットにたくさん散見された。これで試したところ、うまく行った。

$ sudo /etc/hosts

192.168.3.5 fox10225fox.ddns.net