# SSH

linux の使用目的の大半は ssh
母艦から操作できるようにしたほうが楽なので使えるようにする。

# SSH 接続の設定

# インスコ
$ sudo apt install openssh-server

# (一応)設定のコピー
$ cd /etc/ssh
$ sudo cp sshd_config sshd_config.copy

# 編集
$ sudo vim sshd_config

# 設定を適用するための再起動
$ sudo systemctl restart sshd

sshd_config の編集箇所は下の通り。
設定はお好みで。

  • Port をデフォルトのものから移動 (Port)
  • 特定のユーザーのみログインOKに (AllowUsers)
  • root でのログインを禁止に (PermitRootLogin)
  • 鍵認証を明示的に許可 (PubkeyAuthentication)
  • パスワード認証を禁止に (PasswordAuthentication)
    • 192.168.1.* からのアクセス時だけパスワード認証OK
$ diff -U 0 sshd_config.copy sshd_config
--- sshd_config.copy    2021-10-20 18:14:48.462826795 +0900
+++ sshd_config 2021-10-20 18:49:11.533569734 +0900
@@ -15 +15 @@
-#Port 22
+Port <ポート番号>
@@ -18,0 +19 @@
+AllowUsers <ユーザー名>
@@ -34 +35 @@
-#PermitRootLogin prohibit-password
+PermitRootLogin no
@@ -39 +40 @@
-#PubkeyAuthentication yes
+PubkeyAuthentication yes
@@ -58 +59 @@
-#PasswordAuthentication yes
+PasswordAuthentication no
@@ -123,0 +125,2 @@
+Match Address 192.168.1.*
+  PasswordAuthentication yes

参考: Ubuntu 20.04 : SSH サーバー インストールと設定 : Server World (opens new window)
参考: 外からは公開鍵、内側だけはパスワード許可 - sshd の ローカル側だけパスワードを使えるようにする。 - それマグで! (opens new window)
参考: CentOS7 SSH設定の記録 - Qiita (opens new window)

ローカルネットワークではパスワード認証、外部ネットワークでは鍵認証という形にした。
ローカルでは任意のPCからアクセスしたい可能性が想定されるので。
鍵設定はまた今度。(直近で使う予定がない)

てか Match 便利だねぇ... 複雑なこともなんでもできそう。
個人的には鍵なら全てのユーザーにログイン可能、ってことをやりたかったんだけど、Matchにその構文が無かった...。

TIP

/etc/sshssh_configsshd_config という2つのファイルがあって、なにが違うのか気になったので調査した。

  • ssh_config: ssh で接続するときの設定
  • sshd_config: ssh で接続されるときの設定

あーなるほど。
ssh コマンドもこのパッケージの一部なのね。

参考: sshとsshdの違い - Qiita (opens new window)

# SSH 接続を行う

母艦、別のPCから以下のコマンドで SSH 接続できる。

$ ssh <ユーザー名>@<アドレス> -p <ポート番号>
=> パスワード入力

これができたら後はリモートで作業しても良い。
PCはログアウトして放置しておこう。

WARNING

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

これは前回のアクセス時と環境が違うよ!という警告です。
ホストの公開鍵が違うので中間者攻撃されているかもよ、という親切心の塊です。
焦らず対象のホストの記録をローカルから消しましょう。

$ ssh-keygen -R <アドレス>

(はじめサーバー側のエラーかと思って、設定ファイルとにらめっこしていたのは内緒。)
(英語は Google 翻訳にかけてでも読もう。)

参考: 「SSHホスト鍵が変わってるよ!」と怒られたときの対処 - Qiita (opens new window)