OPEN-SSH

安全にサーバーをリモート

サーバー管理はほぼリモートが基本で、
サーバーを構築後は、サーバーから離れた
WindowsやLinuxのクライアントマシンから管理し、
余程のことがない限り、サーバーを直接
いじることは稀です。
リモートの際のサーバー・クライアント間は
主にSSH(セキュアシェル)というプロトコルを
使うことで、安全な通信が保証されます。

暗号化自体は強固なものであっても、それは
通信を盗み見られることがないというだけで
サーバーにユーザー名とパスワードで
アクセスできるような設定では、比較的
簡単に不正アクセスされてしまいます。

SSHのアクセス方法は公開鍵暗号方式を使います。
公開鍵暗号方式では、通信内容を公開鍵で暗号化し、
秘密鍵で復号します。
秘密鍵はアクセスできる特定のユーザーしか
保持させなければ安全が確保できます。

パスワードのアクセスを禁止し
公開鍵・秘密鍵による認証とします。
サーバー側(リモートされる側)に公開鍵を
置いておき、ペアとなる秘密鍵はクライアント側
(リモートする)に保管することで安全な
通信が保証されます。

AlmaLinuxなどのサーバーディストリビューションは
ディフォルトでSSHが使用可能ですが、パスワードでの
アクセスが可能です。
そこでroot権限を持つことができるスーパーユーザーで
パスワードによりLANからアクセスをし、設定が終わったら
パスワードアクセスを禁止します。
その後にWANの接続を行うことで、外部からの不正アクセス
からのセキュリティを確保します。

SSHで接続できる条件
(サーバー・クライアントともLinuxの場合)

1 クライアント(制御する)側に秘密鍵である
  id_rsaが存在する。
2 サーバー(制御される)側に秘密鍵とペアで作成された
  公開鍵であるauthorized_keysが存在する。
3 ユーザーがSSHでのアクセスできる権限がある。

* 1および2の鍵はユーザー直下の.sshディレクトリに
  置かれていること。
* 3 ユーザーオプション
  /bin/bash(アクセス可)
  /sbin/nologin(アクセス不可)

以下、説明していきます。

ペアキーを作成(1と2)します。

サーバー・クライアントのどちらで作成してもよいのですが
ここではクライアントでペアキー作成して、秘密鍵のid_rsaを
サーバーに渡すものとします。

ユーザーディレクトリ下に.sshがない場合

$ cd
$ ll -a

あればOK、なければ作成

# mkdir /home/ユーザー/.ssh
# chmod 700 /home/ユーザー/.ssh

.sshは700である必要があります。

ペアキーを作成
秘密鍵はid_rsa、公開鍵はid_rsa.pubとして
作成されます。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ユーザー/.ssh/id_rsa):  *1
Enter passphrase (empty for no passphrase):    *2
Enter same passphrase again:
Your identification has been saved in /home/ユーザー/.ssh/id_rsa.
Your public key has been saved in /home/ユーザー/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vR2csCon/sQmNxYS0uksYdbB9UJ1NiuRIrm7LgjJL78 root@**.**.jp
The key’s randomart image is:
+—[RSA 2048]—-+
| ..oo.o.+ |
| o++…+ o |
| = =o..+ . |
| o =.. o = . |
|.. . +.S o + |
|o. ..o o o . |
| … +.X . . |
| ……X . |
| oE.oo.. |
+—-[SHA256]—–+

*1 パスやファイル名を変更しなければ
そのままEnter
*2 パスフレーズが不要なときは
そのままEnter
(自動バックアップ等の際に
パスフレーズは邪魔)

これで/home/ユーザー名/.ssh下に秘密鍵であるid_rsaと
公開鍵であるid_rsa.pubが作成されるのですが、
公開鍵のファイル名はauthorized_keysなので
ログインしたいサーバーの/home/ユーザー/.ssh下に
空のauthorized_keysを作成して、クライアント側にある
d_rsa.pubの内容をコピペする。

クライアント側準備

作成された秘密鍵のアクセス権変更

$ chmod 600 .ssh/id_rsa

作成したid_rsa.pubをテキストエディターなどで
開いておく。

サーバーにアクセス。
$ ssh ユーザー名@サーバーIPアドレス

アクセスしたサーバー内作業

$ vi .ssh/authorized_keys

空のauthorized_keysが開くので、
id_rsa.pubの内容をコピペし保存。

アクセス権変更
$ chmod 600 .ssh/authorized_keys

ssh_configの設定

$ sudo vi /etc/ssh/ssh_config

環境により設定は色々ですが、とりあえず
パスワードアクセスを禁止します。

PermitEmptyPasswords no
PasswordAuthentication no

SSHサーバー再起動

$ sudo systemctl restart sshd.service

これでペア鍵による安全な接続ができます。

ちなみに

逆にサーバー側でペア鍵を作成し、
id_sra.pubをauthorized_keysにリネームして
chmodで644を600に。
クライアント側で作成する空のid_rsaに
サーバー側のid_rsaの内容をコピペして
chmodで600にしてやってもOKです。

サーバー・クライアントにペアの秘密鍵と
公開鍵の両方を置いた場合、サーバーから
クライアントへのアクセスも可能となり、
サーバーのバックアップをクラーアントマシンに
取る場合などに使います。
(クライアントにもOpenssh関連のインストールが必要)

Linuxからサーバーにアクセス

ターミナルから以下のコマンドで
$ ssh ユーザー名@サーバーIPアドレス

$ ssh oba-q@219.117.245.194
これだけで接続されます。


Windowsからサーバーにアクセス

TeraTerなどのターミナルエミュレーターを
使用するとサーバーにアクセスできます。
この場合ペアキーはTeraTermよりサーバー側での
作成が簡単でしょう。
サーバーで作成したid_rsaをメモ帳に
コピペして、id_rsaという名前で任意の場所に
保存しておきます。
サーバー側のid_rsa.pubはauthorized_keyに
リネームし、600であること確認しておきます。
TeraTermを起動しSSH認証でユーザー名を入力し、
認証方式をRSA/DSA/SC/DSA/ED25519鍵を使う
にチェックを入れます。
秘密鍵の右横にあるボタンで、任意の場所にある
id_rsaファイルを選択し、開くボタンで接続できます。

注意
拙生はrsyncでsshを通して自動バックアップを
しているため、rootでのログインを許可したり
パスフレーズをパスしていますが、当然
セキュリティは下がり別途対策が必要なので
特別なことがない限り
 ・ rootのログインはさせない。
   sshd_configで PermitRootLogin no
 ・ ペアキー作成時パスフレーズの設定は行う。
ほうがよろしいかと。

*かなり昔の話ですがssh-dssを採用していましたが
脆弱性が見つかったため、現在はrsaを使用しています。