差分

ナビゲーションに移動 検索に移動
手順化するまでもないかなとも思いつつ…「外部からSSH接続したい」でも「IPアドレスが半固定」しかも「IPv6プラス」ってなると、なかなかIPv6に対応したDDNS(ダイナミックドメインネームサーバー)が見つからないです。<br/>細かい設定までは調べたことがなかったので、設定の情報を含めてインストールしてみます。今のところメジャーなのが「[https://i.open.ad.jp/ OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト]」みたいなので、これを利用して外部から接続できるようにしてみたいと思います。
= インストール = 現在のIPv6アドレスの確認 ==以下のコマンドを実行します。外部に公開したいサーバーのIPv6アドレスを調べます。<br/>googleで調べると「ifconfigで調べる」というのがたくさんヒットしますが、Debian9.9では「ifconfig」が非推奨になってしまったので、代わりに「ip」で調べます。(Raspbianは「ifconfig」で調べられます)<syntaxhighlight lang="bash">pacman -S opensship a</syntaxhighlight>で、以下のような結果が得られるかと思います。<syntaxhighlight lang="text">1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: enxAABBCCDDEEFF: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether AA:BB:CC:DD:EE:FF brd ff:ff:ff:ff:ff:ff inet 192.168.1.2/24 brd 192.168.1.255 scope global enxAABBCCDDEEFF valid_lft forever preferred_lft forever inet6 HHHH:IIII:JJJJ:KKKK:LLLL:MMMM:NNNN:OOOO/64 scope global noprefixroute dynamic valid_lft 86398sec preferred_lft 14398sec inet6 PPPP:QQQQ:RRRR:SSSS:TTTT:UUUU/64 scope link valid_lft forever preferred_lft forever</syntaxhighlight>「inet6」の「scope global」となっている「HHHH:IIII:JJJJ:KKKK:LLLL:MMMM:NNNN:OOOO」がグローバルIPv6アドレスとなります。<br/>(セキュリティ的には危険ですが、試しにルーターの設定を「パススルーを許可する」にして、このアドレスにSSH接続してみると接続できるかと思います。もちろんアドレスが変わってしまえば接続できなくなりますが…)
だーっと、インストールされます。== 「OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト」に登録 ==次に「OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト」に登録していきます。<br/>インストール自体はこれで完了ですが…まずは「[https://i.open.ad.jp/ OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト]」にアクセスします。<br/>この状態ではssh接続できないので、サービスを起動します。<syntaxhighlight lang="bash">systemctl start sshdsystemctl enable sshd</syntaxhighlight>念のため、正常に起動しているか確認します。<syntaxhighlight lang="bash">systemctl status sshdすると、画面下部に以下のような項目があるかと思いますので、入力していきます。<br/syntaxhighlight>「active (running)」と表示されていれば正常に起動しています。[[ファイル:Ddns-setting-001.png | 400px]]
= 設定 =* ホスト名:任意のホスト名を入力しますセキュリティを加味して、ポート番号など変更したい場合があるかと思います。<br/>* 初期IPv6アドレス(オプション):前段で取得したIPv6アドレスを入力しますその場合、「/etc/ssh/sshd_config」ファイルで設定します。<br/>基本的デフォルトの設定で動作しますので、変更したい場合は「sshd_config」内でコメントを外して設定します。* メールアドレス:ホストキー(後述します)紛失時に使用します。(登録しておいたほうが安全です)
以下、私がよく変更する設定項目だけ上げていきます。入力し終わったら「作成」ボタンをクリックします。<br/>「新しい DDNS ホスト 「example.i.open.ad.jp」 の作成が完了しました。」と表示されればOKです。<br/>「OK」ボタンをクリックします。
すると以下の様な一覧が表示されます。(横長ではみ出てますwww)<dlbr/>[[ファイル:Ddns-setting-002.png]]<dt>Port<br/dt><dd>ssh接続するポート番号を指定します。<syntaxhighlight lang="text">#9022番ポートで接続したい場合* ホスト名(FQDN):IPアドレスの代わりに使うホスト名になりますPort 9022</syntaxhighlight></dd>* IPv6アドレス:上の画像では「::1」と表示されてしまっていますが、実際は現在のIPv6アドレスが表示されます<dt>PermitRootLogin</dt>* ホストキー情報:ホストキーと合わせて、更新用の「ホスト名」「アドレス」「URL」が表示されています<dd>rootアカウントでのログインの可/不可を設定します。<syntaxhighlight lang="text">#rootアカウントでのログインを許可する場合* 登録メールアドレス:登録時に入力したメールアドレスが表示されていますPermitRootLogin yes* クエリ回数~操作:省略
#rootアカウントでのログインを許可しない場合PermitRootLogin no<ちなみに、登録したWEBブラウザで「[https://syntaxhighlight><i.open.ad.jp/dd><dt>PubkeyAuthenticationOPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト]」を開くと登録したホスト一覧が表示されるのですが、別のWEBブラウザで開くとホスト一覧が表示されません…。<br/dt><dd>公開鍵・秘密鍵を使用したログインの可/不可を設定します。<syntaxhighlight lang="text">#公開鍵・秘密鍵を使用したログインを許可する場合PubkeyAuthentication yesそんなときは、「過去に作成した DDNS ホストをリストに追加」機能を利用して、表示させたい「ホストキー」を入力するとこで表示できるようになります。
#公開鍵・秘密鍵を使用したログインを許可しない場合PubkeyAuthentication noまた、その下の更新用「ホスト名」「アドレス」「URL」ですが、公開したいサーバーのIPv6アドレスが変わってしまったときに、公開したいサーバーから「ホスト名」「アドレス」にpingや「URL」にアクセスするとIPv6アドレスが最新の情報に更新されます。<br/syntaxhighlight></dd><dt>PasswordAuthentication</dt><dd>パスワードによるログインの可/不可を設定します。<syntaxhighlight lang="text">#パスワードによるログインを許可する場合PasswordAuthentication yes(ルーターからやっちゃダメですよ…ルーターのIPv6アドレスに書き換わっちゃうので…私はしばらくルーターからやってましたwww)
#パスワードによるログインを許可しない場合PasswordAuthentication no</syntaxhighlight></dd><dt>X11Forwarding</dt><dd>X11ポートフォワードの可/不可を設定します。<syntaxhighlight lang="text">#x11ポートフォワードを許可する場合X11Forwarding yes登録は以上です。
#x11ポートフォワードを許可しない場合== systemdでIPv6の更新をする ==X11Forwarding nosystemdを使用して、一定間隔で「アドレス」にpingをするようにしてみます。<br/>先ずは、公開したいサーバーにログインして、以下のコマンドを実行します。<syntaxhighlightlang="bash">sudo nano /etc/systemd/system/ddns-update.service</ddsyntaxhighlight>新しくファイルを作成しているので、中身はなにもないはずです。<br/>ちなみに「/etc/systemd/system」ディレクトリは「systemd」で動かすサービスファイル置き場みたいです。<br/dl>つまり今回は「ddns-update」サービスを作成していきます。
= 公開鍵・秘密鍵を使用して接続する =次にファイルの中身ですが、以下の様にします。セキュリティを加味して公開鍵・秘密鍵(鍵ペア)を作成して、認証する設定に変更します。<br/syntaxhighlight lang="text">パスワード認証でもそれなりに長いパスワードにすれば良いのかもしれませんが、[https://ja.wikipedia.org/wiki/%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E6%94%BB%E6%92%83 ブルートフォースアタックUnit]をされたりすれば、安全とは言い切れません。<br/>鍵ペアを使用した認証は、「公開鍵をサーバーに設定」「秘密鍵を接続するクライアントに配布」することで、秘密鍵を持っているクライアントしか接続できなくなります。<br/>秘密鍵を厳密に管理すれば、理論上安全と言えます。<br/>Description=ddns ipv6 update
以下の手順は実は手を抜いて、秘密鍵をサーバー側で作成しています。[Service]Type=simpleExecStart=/bin/ping6 -c 1 [更新用IPv6アドレス]<br/syntaxhighlight>(厳密に言えば、秘密鍵は秘密にしたいわけで…ネットワーク上に流すのははばかられます…)[更新用IPv6アドレス]は先程の一覧の「更新用アドレス」に置き換えてください。<br/>上記の一覧の例を反映すると…<syntaxhighlight lang="bash">[Unit]なので、以下の手順は「まぁ…そこまでは気にしないよ」という方向けですwww。Description=ddns ipv6 update
[Service]
Type=simple
ExecStart=/bin/ping -c 1 2409:11:c0e0:468:6b16:a7eb:503e:c23b</syntaxhighlight>
となります。
以下のコマンドで鍵ペアを生成します。<syntaxhighlight lang="bash">ssh-keygen -t rsa -b 4096c 1」は1回実行という意味です。<br/syntaxhighlight>「Description」は好きな内容に変更しても大丈夫です。
次にこれを一定間隔で起動するタイマーを作成します。<br/>以下のコマンドを入力してください。
<syntaxhighlight lang="bash">sudo nano /etc/systemd/system/ddns-update.timer</syntaxhighlight>
これも新規作成です。<br/>
内容は以下の様にします。
<syntaxhighlight lang="text">[Unit]
Description=ddns ipv6 update timer
鍵ペアの格納先を聞かれたら、任意に指定します。<br/>[Timer](デフォルトでいい場合は、何も入力せずにEnterキーを押します)<syntaxhighlight langOnCalendar="bash">Enter file in which to save the key (/home/test/.ssh/id_rsa)*-*-* *:00:</syntaxhighlight>00
[Install]
WantedBy=timers.target</syntaxhighlight>
内容的には「ddns-update.serviceを毎時0分0秒に起動する」と言って感じです。<br/>「ddns-update.service」ファイルと同様に「Description」は好きな内容に変更しても大丈夫です。
次にパスフレーズ(パスワードみたいなものです)を聞かれるので、任意の文字列を設定します。準備ができたので、動かしてみます。<br/>動かすときは以下のコマンドを実行します。<syntaxhighlight lang="bash">Enter passphrase (empty for no passphrase):sudo systemctl start ddns-update.timer</syntaxhighlight>エラーが出なければOKです。<br/>エラーが出たときは内容を確認してください。<br/>内容が合っているのにエラーになるときは…「nano」上で改行をし直してみてください。<br/>(私は改行コードの違いでエラーが出ていることに気づくまで、結構時間がかかってしまいました)
正常に動いたなら、今度は起動時に動くようにします。<br/>以下のコマンドで起動時に動くようになります。
<syntaxhighlight lang="bash">sudo systemctl enable ddns-update.timer</syntaxhighlight>
再入力が求められるので、同じパスフレーズを入力します。ちなみに、止めたいときは…<syntaxhighlight lang="bash">Enter same passphrase again:sudo systemctl stop ddns-update.timer</syntaxhighlight>
起動時に動かないようにするには…
<syntaxhighlight lang="bash">sudo systemctl disable ddns-update.timer</syntaxhighlight>
以下のように表示されれば、OKです。<syntaxhighlight lang="bash">Your identification has been saved in /home/test/.ssh/id_rsa.Your public key has been saved in /home/test/.ssh/id_rsa.pub.The key fingerprint is:SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX test@archThe key's randomart image is:+---[RSA 4096]----+| || || || || || || || || |+----[SHA256]-----+</syntaxhighlight>です。
以下のコマンドで、公開鍵の情報を設定します。ここで少し疑問に思う人がいるかも知れません…<syntaxhighlight lang="bash"br/>cat ~/「ddns-update.service」と「ddns-update.sshtimer」と実行コマンドの「sudo systemctl start ddns-update」の3つを関連付ける設定をしていません。<br/id_rsa.pub >実は単純な話で、ファイル名だけで関連付いています。<br/> ~「ddns-update.service」と「ddns-update.timer」は「ddns-update」が同じになっています。<br/>これで「*.ssh/authorized_keyschmod 600 ~/service」ファイルと「*.ssh/authorized_keystimer」ファイルはセットだと認識しています。<br/syntaxhighlight>また実行コマンドは「ddns-update.timer」と指定するだけで「*.service」ファイルを探しに行きます。
 次に秘密鍵(~/.ssh/id_rsa)をUSBメモリ等を利用してネットワークを経由させないで、どうにかクライアントに持ってきます。<br/>(秘密鍵は削除したほうが良いのかな???インナーロック状態だから、JAF呼ばないと開けられないけどwww)<br/>クライアント側は、ターミナルアプリに依存するのでググってください…  次に「/etc/ssh/sshd_config」ファイルを編集してsshの設定を変更します。<br/>上の、sshの設定で大体予想は付くと思いますが…<br/>一気に設定せずに、確認しながら進めます。  先ずは、コメントを外して公開鍵認証を有効にします。<br/>【修正前】<syntaxhighlight lang="bash">#PubkeyAuthentication yes</syntaxhighlight>【修正後】<syntaxhighlight lang="bash">PubkeyAuthentication yes</syntaxhighlight>  以下のコマンドで設定変更を反映させます。<syntaxhighlight langルーターの設定 ="bash">systemctl reload sshd</syntaxhighlight>  反映したら、sshでログインしてみます。<br/>ログインできたら、改めて「/etc/ssh/sshd_config」ファイルを編集してパスワード認証を無効にします。<br/>【修正前】<syntaxhighlight lang="bash">#PasswordAuthentication yes</syntaxhighlight>【修正後】<syntaxhighlight lang="bash">PasswordAuthentication no</syntaxhighlight>  以下のコマンドで設定変更を反映させます。<syntaxhighlight lang="bash">systemctl reload sshd</syntaxhighlight>  パスワードでログインしようとしてエラーになればOKです。  ついでと言ってはなんですが…<br「[[「OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト」の利用/>rootでのログインも無効にします。<br/>【修正前】<syntaxhighlight lang="bash">ArchLinux#ルーターの設定 | PiVPNによるOpenVPNのインストール#PermitRootLogin prohibit-passwordルーターの設定]]」に書いているので、そちらを参照してください。<br/syntaxhighlight>【修正後】<syntaxhighlight lang="bash">PermitRootLogin no</syntaxhighlight>  以下のコマンドで設定変更を反映させます。<syntaxhighlight lang="bash">systemctl reload sshd</syntaxhighlight>sshのデフォルトポートを開放したいなら22番ポートを開放してください(22番ポートを開放するのは危険だと思いますが…)
= 参考サイト =
[https://qiitai.com/3no3_tw/items/4b5975a9f3087edf4e20 Raspberry Pi3のLAN外からのSSH接続設定方法 - Qiita]<br/>[https://qiitaopen.ad.comjp/suthio/items/2760e4cff0e185fe2db9 お前らのSSH Keysの作り方は間違っている - QiitaOPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト]<br/>
[[Category:ssh]]
[[Category:ArchLinux]]
[[Category:鍵認証DDNS]]{{DISPLAYTITLE:sshのインストール}}

案内メニュー