前回はRaspberry PiにSerposcopeをインストールするための作業をしました。
個人で使う用なのでユーザー名やパスワードも適当で良いのですが、勉強がてらにSSHでの接続を試してみました。
めんどくさいユーザー認証がなくなる&セキュリティが高くなるので、備忘録として残しておきます。
前回までの作業はこちら
https://www.web-bibouroku.xyz/serposcope-setting/
SSHとは?
SSHとは「リモート操作を暗号化して安全に操作するためのプロトコル」です。
Secure Shellの略称で、直訳では「安全な殻」といったところでしょうか。
SSHを使うと何がいいのか?というと、通信が暗号化されるため、安全に通信が出来るようになります。
昨今はテレワークをされている方も多いですが、会社のネットワークに接続してファイルなどを見ますよね?
ログインするときに、通信が暗号化されていない状態(平文)で送ったら危険です。ハッカーにパスワードがバレて社内情報が抜かれ放題になります。そのためSSHを使いましょうということです。
ちなみにファイルをサーバーにアップロードするときに使うFTPも、SSHを組み込まれたSFTPという仕組みがあります。
具体的になにしてるの?
使えればいいじゃんという人は読み飛ばしてください。調べはしましたが、私も理解できない部分が多く間違いもあるかもしれないのはご容赦ください。
SSHはあらかじめ公開鍵と秘密鍵と呼ばれるものを生成し、秘密鍵はクライアントが持ち、対となる公開鍵をサーバーが持つことで認証を行います。
この際に推測が困難なセッションIDなども事前に共有しています。
クライアントが秘密鍵を使って署名したものを、サーバー側が公開鍵で検証できれば認証が完了する仕組みです。
昔で言う割符のようなものでしょうか。クライアント側の通信があったときに「ああ、登録されているクライアントのAさんね」と判断される材料になるわけです。
この鍵には素因数分解が用いられていて、片方からは推測しやすいが、もう片方からは推測しにくいという特徴があります。
例えば5×43は215ですが、215の素因数分解をすぐに答えられる人は多くないでしょう。この桁数をもっと複雑にすると天文学的な時間がかかります。
力づくでパスワードを解読できたとしても数百年たっている……ということでこの暗号化を用いて通信がされています。
鍵の生成方法
ここからは具体的にSSH通信を行うための作業になります。Windows10での作業を想定して書きます
まずはPowerShellを管理者として起動します。スタートからWの項目にWindows PowerShellがあるので、右クリックから管理者として起動します。
コンソールが立ち上がったら、下のコマンドを打ちます。
ssh-keygen
コマンドを打つとpassphraseを2回聞かれますが、何も打たずにEnterで進めます。画面が更新されないので一見進んでいないように見えますがちゃんと進んでいます。
妙な模様が表示されれば鍵の生成が完了しています。
ちゃんと鍵が生成されているか、下のコマンドでディレクトリを確認します。鍵生成の時に特別な設定をしていなければユーザーのフォルダ内に鍵が生成されます。
Windowsの操作なので直接フォルダを見ても確認しても構いません。
フォルダには公開鍵のid_rsaと秘密鍵のid_rsa.pubが生成されているはずです。id_rsa.pubはファイルコピーしてauthorized_keysと名前を変更します。拡張子は不要です。
cd C:\User\Username\.ssh
ls
サーバーに転送する
公開鍵のid_rsa.pubをコピーしたauthorized_keysをRaspberry Piに転送します。
転送する方法は何でもいいのです。私はFileZillaを使ってFTPで送りましたが、WinSCPでもいいです。ファイル転送ツールの使い方は巷に溢れているので調べて下さい。
サーバー上のファイルの置き場所は下です。[user]はログインしてるユーザーに置き換えてください。
ディレクトリの.sshは非表示になっています。GUIで確認する場合は注意してください。
/home/[user]/.ssh/authorized_keys
公開鍵の権限を変更する
公開鍵の権限を適切に設定します。1つ目のコマンドでディレクトリに移動して、chmodで権限を変更します。
変更が終わったら念のため権限を確認しましょう。2つ目のコマンドで権限を確認します。3つ目の表示結果のように左側に-rw——-と表示されていれば成功です。
この-rw~というアルファベットの羅列は、ファイルの権限(パーミッション)です。
一つ目の-はファイルの意味で、rwはファイルの所有者に読み取りと書き込みの権限あることを意味しています。先ほどのchmod 600がその指示です。
cd /home/[user]/.ssh
chmod 600 authorized_keys
ls -l
-rw------- 1 user user 575 n月 dd 00:46 authorized_keys
SSHポート番号の変更
SSHはポート番号22を利用して通信をします。そのことは当然ハッカーも知っているため、ポート番号22は狙われやすいです。
SSHで利用するポートを変更しましょう。下の1つ目のコマンドでsshd_configをviで変更します。
2つ目は変更する箇所です。viで開いたらPortを任意の番号に変更しましょう。
ただし、よく使われるポート番号は避けてください。どんな番号ならつけていいのかは調べればすぐにわかります。私は5万台の適当な番号にしました。
ここではポートの変更だけ書きましたが、セキュリティ向上のため、他にも変更したほうが良い値がいくつかあります。別記事を作るので合わせて見てください。
sshのディレクトリには似たファイルが沢山ありますが、sshd_configはサーバー側の設定で、ssh_configはクライアント側の設定です。そのため今回はsshd_configの設定を変更します。
vi /home/etc/ssh/sshd_config
Port [any]
ポート以外にも設定変更したほうが良い箇所は別記事にまとめました。まとめてやってしまいましょう。
https://www.web-bibouroku.xyz/ssh-setting/
SSHのconfigを作成
SSHの接続では誰がどんな設定で接続するかを毎回入力しないといけません。
かなり面倒なので設定ファイルのconfigを作っておきましょう。configを利用すれば、設定したファイル名を入力するだけでSSH接続ができます。
C:\User\Username\.sshにSSHの秘密鍵と公開鍵を作ったと思いますが、ここが作業ディレクトリです。PowerShellでなくGUIからフォルダを見て作業してOKです。
このフォルダにテキストでconfigファイルを作ります。拡張子は無しです。
configファイルには下のように書き込みます。
Host [any]
Hostname [hostname or IP]
User [user]
Port [port_no.]
IdentityFile ~/.ssh/id_rsa
1行目のエイリアスは任意の文字列です。SSH接続するときには、この値を使ってどの設定でログインするかを判断しています。名前に当たる部分です。
ちなみにconfigには複数の設定が書けるので、一度設定を書けば名前だけでログインができます。
2行目のHostnameにはhostnameもしくはIPを指定します。私はRaspberry Piのアドレスを固定してないのでhostnameを書きました。
hostnameがわからない時は、サーバー上でhostnameと入力すると表示されます。
3行目はUserを設定します。サーバーにログインしたいユーザーを設定しましょう。
4行目はポート名を設定します。SSHの変更したポート番号を設定します。
5行目はSSHの秘密鍵の保存場所です。
SSHでサーバーに接続する
接続の準備が整いました。PowerShellを立ち上げてください。
立ち上げたら、以下のコマンドを入力します。[any]は先ほど作ったconfigのHostに設定したエイリアスです。
ssh [any]
接続するまで十数秒かかると思いますが、Loginメッセージが出ればSSH接続は完了です。お疲れさまでした。
コメント