PR

FreeBSD SSH 接続

FreeBSD
記事内に広告が含まれています。

今日はゴールデンウィークの初日です。しかもコロナによる行動制限のない久しぶりの休日です。晴れていれば沢山の人出が見込まれたのでしょうが、残念ながら朝からの雨でした。普段リモートで仕事している関係で、オフィスに行く機会がなかなかな無かったことからお待たせしていたプリンタのネットワーク接続をしに行ってきました。元々東京にいる IT サポートで受けた仕事なので、ちょっと出張してケーブルを引き回せば済むことなのですが、なぜかネットワーク管理者の私に話がまわってきました。まぁ、いいでしょう。車で高速を飛ばしていったのですが、今日の雨は非常に強く、道路のいたるところに水たまりができていて、あまり速度を出すと、ハンドルを取られそうになるくらいでした。運転には気を付けましょう。

Tera Term インストール

さて、とりあえず OS もインストールできまして、これからカスタマイズしてゆくのですが、コンソールは何かと使いにくいと思いませんか?複数のシェルを使うことができませんし、コピーペーストがやりにくいですし、何よりもマウスのコントロールを VMware に渡すのか、ホスト OS の Windows に戻すのかと切り替えが発生して便利ではありません。そこで、ターミナルエミュレータを使用して SSH で接続すればいくつでもシェルを使えますし、マウスのコントロールを切り替えることなくどのシェルでも使うことができて、何よりコピーペーストが非常に楽になります。SSH2をサポートしているターミナルエミュレータはいくつもありますが、私は Tera Term をお勧めしたいと思います。

Tera Term は検索サイトで検索すれば山ほどダウンロード先が出てくると思いますが、私はこちらから落としてきました。今現在 teraterm-4.106 が一番新しいようです。本当のオリジナルはこちらなのですが、ダウンロードしてきたものは、オリジナルの後継版という扱いになっているようです。teraterm のインストールは exe を実行して、特にオプションの変更はなくても期待通りに動くと思います。日本の方で英語のメッセージを使うことは構わないのですが、ソフトウェア内部のロケールは日本語にしておくのが良いと思います。漢字などの日本語がバケバケにならずに済みます。

インストール後起動するとこのような感じになります。

何の設定もありません。

FreeBSD のアドレスを確認します。

FreeBSD のアドレスを確認します。

こちらが Tera Term をインストールした Windows 側のアドレスです。IPv6 Address がグローバルアドレスです。Link-Local Address が同じネットワークセグメント内だけで使用できるアドレスです。どのインターフェースを使用するか指定して使用します。Temporary IPv6 アドレスは他のサイトに接続する場合に、ソースアドレスになるはずのグローバルアドレスを隠すために使用されるアドレスです。

何種類ものアドレスが使われています。

アドレス指定での接続

FreeBSD サーバにつないでみましょう。

新規接続を行います。

確認した IPV4 アドレスを入力します。IPv6 のリンクローカルアドレスでも、グローバルアドレスでもどちらでも使用できます。IPv6 アドレスを使用する場合は、アドレスを [ ] で挟みます。例えば、ループバックアドレスを指定する場合は [::1] となります。リンクローカルアドレスの場合はどのインターフェースを使用するのかを明示する必要があります。このようにアドレスを指定して SSH 接続することができます。まずこちらの IPv4 アドレス。

IPv4 アドレス。
続いて、IPv6 グローバルアドレス。
最後に IPv6 のリンクローカルアドレス。インターフェース3番を指定しています。

こちらが who コマンドの出力です。Windows 側でどのアドレスを使用して接続されたかがわかります。1行目はコンソールです。ですので、IP アドレスはありません。2行目は IPv4 アドレスです。3行目は IPv6 グローバルアドレスです。ご覧のように Windows にあった Temporary Address を使用して接続されています。最後の行はリンクローカルアドレスでの接続です。アドレスに、どのインターフェースからの接続かということが付け加えられています。名前からもわかるように、リンクローカルアドレスはルータを超えて接続することができません。従って、インターネットのすべての IPv6 サイトへは Windows ですと、Temporary Address からの接続となります。とりあえず、ネットワーク管理者であるというところもお見せできたかと思います 🙂 別の機会に Cisco の router や switch, firewall なども触ってみたいと思います。因みに、この Temporary IPv6 ですが、アイデアはいいのですが、ssh で長時間接続しているとアドレスが変わってしまって、セッションが途切れてしまいます。そのために私は後に Temporary IPv6 を disable して、メインの IPv6 アドレスをソースアドレスとするようにしています。

ネットワーク接続されている場合は接続元のアドレスが見えます。

同じセグメント内の2台の機材なので、どのアドレスでも使用できます。が、簡単のために IPv4 アドレスを使用して残りをご説明してゆきます。ちなみに、ふつう人間はこのようなアドレスを直接使用することは稀です。特に IPv6 アドレスは少なくとも私には 100% 覚えられません。アラ還ですから 🙂 コンピュータやネットワーク機器にはこれらのアドレスが必要ですが、普通の人間にはそんなものは不要です。人は普通サイト名やコンピュータ名を使用して DNS と呼ばれる仕組みを使用してアドレスに変換して接続するようになっています。別の機会で FreeBSD で DNS を組んでみようと思います。皆さんよくご利用になる google さんですが、このようなアドレスを持っています。

google に検索しに行く場合、これらの IPV4 か IPV6 アドレスのいずれかを使用して接続することになります。

セキュアな接続のために

大きく横道にそれてしまいました 🙂 本題に戻りましょう。Tera Term はこのサイトに接続したことがないと注意してくれています。普通原因として考えられるのは、文字通り初めて接続する場合、あるいは本来接続しようとしていたサイトではない場合。ですのでレンタルサーバなどで SSH 接続を提供してくれている場合などである日突然このメッセージが出てきたときは本当に正しいところに接続しようとしているか確認したほうがよさそうです。今回は初めての接続ですので fingerprint の値をファイルに書き込んでおきます。一番下のチェックマークの部分がそれです。次回同じサイトに接続する時に既に持っている fingerprint と同じ値がどうか調べて、同じであればこのメッセージは表示されません。因みに、今回は IPv4 アドレスを指定して接続したので、例えば IPv6 などの他のアドレスや、DNS設置後にマシン名を使用して接続したときなどは同じメッセージが表示されます。Fingerprint を保存しておくファイルには、今回の場合 IPv4 アドレスと fingerprint の値の組が保存されることになります。逆にホスト名を使用して接続した場合、使用されたアドレスが IPv4 でも IPv6 であってもこの注意は表示されません。なぜなら、マシン名と fingerprint の組み合わせてファイルに保存されるからです。

初めての接続です。

続いてこのような画面になります。FreeBSD の SSH ではプレインテキストのパスワードはデフォルトで使用できないようになっています。ですので、1つ目のオプションは使用できません。2つ目のオプションは公開鍵、秘密鍵を使用した接続になります。まだ鍵の設定はしていないので、このオプションもまだ使用できません。3つ目のオプションを選択して次にゆきます。

接続に必要なオプションを入れてゆきます。

FreeBSD インストール時に指定したパスワードを入力します。入力したパスワードを基にしたチャレンジと呼ばれるハッシュ値をサーバに送って、サーバでも同様に作ったハッシュ値と比較して同じであれば認証が通ります。ですので、パスワードがネットワークを流れることがないので、比較的安全性が高い方法です。

パスワードを入力します。

こんな感じで接続されます。コンソールに比べて数段使いやすいと思いませんか?

コンソールはインストールとトラブル対応時くらいしか使いません。

シェル切り替え

一番最初にコンソールでは複数のシェルを扱えないと書きましたが、実は切り替えて複数のシェルを使うことができます。他の Linux などでも同じなのですが、キーボードの Alt と F1, F2, F3, F4 … と同時に押すことで切り替えて使用することができます。デフォルトは Alt+F1 となっています。

Alt+F8 キーを押すとこのようになります。最初の行に ttyv7 とあります。はるか昔の UNIX を使用していたころからあった、getty というプロセスにより異なるシェルとして切り替えて使用できるようになっています。

デフォルトでは8つの仮想コンソールが使えます。

実際にどのプロセスかというと、こちらです。ttyv0 から ttyv7 までの 8 っありますので、Alt+F1 から Alt+F8 までの8っのシェルを使い分けることができます。デフォルトではソフトウェア的な端末ですので、ハード的な設定はありませんが、実際にボーレートなどを指定して ”端末” と呼ばれる装置を RS232C や RS422 などのインターフェース経由でログインできるようにすることも可能です。ちなみに M$ Azure で FreeBSD や Linux のサーバを立てられたことのある方は既にお分かりかもしれませんが、この機能を使用してコンソールを使用することができます。Windows は GUI しか使えないので Azure Data Center ではコンソールは使用できません。トラブル時にコンソールが使えるのと使えないのでは大違いです 🙂 それからインターネットが一般的でなかった大昔には、電子メールは今のように sendmail や postfix などの MTA がインターネット経由で直接相手先に送るのではなく、UUCP と呼ばれる機能で、RS232Cにモデムを付けて電話回線経由のバケツリレー方式でメールを送っていました。その当時のメールアドレスは今のような絶対アドレスではなく相対アドレスになっていました。こんなメールアドレス見たことあります? otonari!tomodachi!shiriai 意味は私の使っている pokemon というシステムにつながっている otonari というシステムのもう一つ向こうの tomodachi というシステムにいる shiriai さんということになります。ですから shiriai さんから見た私のメールアドレスは otonari!pokemon!pokemon となります。懐かしいですねぇ? UUCP は cron で定期的に起動しますので、今のように送ればすぐ届くなんて言うことはなく、メールが届くまでに何時間もかかることがありました。モデムでピーがガガガァーとつなぐのですが、電話代もかかることから、この例でいうと、システム pokemon や otonari、tomodachi の管理者がどのくらいの頻度でポーリングしているかによって、電子メールがどれくらいの時間で届くかがわかります。また大きく脱線してしまいました。ご参考まで。

getty プロセス。

ログインシェル

ログオン時のシェルは /bin/sh (Born Shell) になっています。文法が共通なので、どの UN*X Like OS にも標準であります。Linux では /bin/bash となっている場合もあります。因みに /bin/bash は /bin/sh の上位互換と思ってもらって構わないと思います。私は長年使い慣れた /bin/ksh (Korn Shell) を使えるようにしたいと思います。が、今回はそのままにしておきます。

私のアカウントです。

こちらは bash がインストールされている別の FreeBSD で man bash とした出力の一部です。bash を sh として実行すると、POSIX 準拠の動きをするということが書かれています。FreeBSD では本来の /bin/sh がありますので、Linux の bash のようなシンボリックリンクは無いようです。

微妙に動きが異なります。

ご参考までに、このスクリーンショットが ls -l /bin/sh を会社の Linux で実行した結果です。

シンボリックリンクになっています。

ホームディレクトリにある .xxxxx ファイル ( いずれもファイル名の先頭がドットのファイル ) はログオン時の各種設定を行うことができるファイルです。別の機会でシェルを sh から ksh に変えるので、カスタマイズせずそのままにしておきます。

個人設定ファイルです。

ssh 公開鍵 / 秘密鍵

最後に公開鍵、秘密鍵を使った SSH 接続をできるようにしてみます。まず、カギを作ります。Tera Term の設定のサブメニューにある、ssh key generator を実行します。

カギを作ります。

基本的にカギはビット長が長いほど強力なのですが、ED25519 ( EdDSA ) は新しい暗号で、ビット長は短いのですが、Tera Term がサポートする鍵のなかで最強のカギとなりますので、これを使用します。これを選択して、生成ボタンを押します。

セキュリティーには気を付けましょう。

そうすると、パスフレーズを入力できるようになりますので、同じ文字列を2回入力します。ここで入力するパスフレーズは SSH 接続するたびに聞かれます。接続時にここで入力したパスフレーズと同じ文字列を入力できると、秘密鍵を使ってもいい人だと判断されます。

個人鍵の所有者本人しか使えません。

公開鍵と秘密鍵を作成保存します。

公開鍵を保存します。
続いて秘密鍵を保存します。

作成したカギを使えるようにするために SSH 認証 を設定します。

SSH 認証 を設定します。

ログイン名と作成した秘密鍵のファイルを指定し、保存します。

普段使うオプションを入れておきます。

変更した内容を保存しておきます。

万事 OK!?

続いてサーバ側の設定です。このようにセキュアなディレクトリとファイルを作成します。その後、作成したファイルを編集します。当然のことながら、この接続自体を SSH などのような暗号化された伝送路上で行ってください。telnet などの素のテキストがそのまま流れる接続だと意味がありません。

可能な限りセキュアに!

サーバ側に置くのは公開鍵のほうです。公開鍵のファイルはただのテキストファイルですのでメモ帳などで開いて、文字列をサーバ側にコピペします。

IPv6 アドレスより複雑です 🙂

これで準備完了となります。ファイルを保存します。

OK!

試してみましょう。新規接続を行います。

新規接続。
接続先があっていれば、OK します。
鍵作成時に指定したパスフレーズを入力して OK します。
新しい窓が開いたら設定は正しく動作したということになります。

公開鍵、秘密鍵のペアでログインできるようにしておけば、どのシステムにも鍵生成時に指定したパスフレーズでログインできます。これはサーバ側のユーザのパスワードとは関係なくなります。また、サーバー側のユーザパスワードを変更しても同じパスフレーズでログインできます。アラ環で記憶力の悪い私にはもってこいの方法です。 ただし、この機能のおかげで本当のパスワードが必要になった時には探し回ることになります 🙂

以下広告


コメント