第2章 Linux準備(ユーザー, SSH鍵, ドメイン)

2-1. Linuxユーザー追加とカギ設定🔑
2-2. Linuxサーバーのホスト名変更
2-3. 新しいLinuxユーザーでログイン
2-4. ドメイン取得とDNS
2-5. VScodeを使ってSSH接続

この章では、Linuxホストを安全に使うための準備をします。
Linuxに新しいユーザーを追加し、SSH鍵を使って安全にアクセスできるよう設定、そしてドメインとDNSの設定を確認します。

前提: WEB/APPサーバーとDBサーバーに、2台のLinuxホストを用意します。それぞれに、Linuxユーザー登録とドメイン&DNS設定をします。

root相当のユーザーでLinuxサーバーにログインしておくこと
1.サーバーのIPアドレス:___
2.サーバーのユーザー名:___
3.サーバーのSSH秘密鍵:___
4.(必要な場合)パスワード:___
※ カゴヤVPSの場合、ブラウザのサーバーコンソールでログインする(rootユーザー、サーバー注文時のパスワード)

2-1. Linuxユーザー追加とカギ設定🔑

Linuxユーザーを追加

root相当のユーザでOSログインして下記ステップで開発用の新しいユーザーを追加します。
前提:Windowsのターミナル(cmd.exe)またはクラウド管理ポータルで、Linux OSにログインしていること

  • $ sudo adduser ユーザ名       # 新しいユーザを追加
  • $ sudo passwd ユーザ名        # パスワード設定      
  • $ sudo usermod -aG sudo ユーザ名  # ユーザをsudoグループに追加 
  • $ id ユーザ名            # sudo権限あるか検査(もしくは $ groups ユーザ名)
  • $ sudo -l -U ユーザ名        # ユーザーが使えるコマンドを検査
  • ※ カゴヤVPSの場合、ここまで進むとPCからSSH接続できる[> ssh -i .ssh/鍵ファイル名 ユーザ名@IPアドレス]

Linuxユーザーを切り替え

Linuxを作成できるユーザーと、追加されたユーザーを切り替えて、新しいユーザーでSSH鍵を作成します

$ su - ユーザ名
(例:$ su - newuser) - を付けるとユーザー切り替えと、新しいユーザーの環境変数とディレクトリに移動します
(例:$ su newuser)-なしの場合はユーザー切り替えのみ

SSH鍵を作成・登録

Linuxに設置する公開鍵🔒と、PCクライアント側で保管する秘密鍵🔑の2つをつくりそれぞれにアクセス権を設定します。

  • SSH鍵の作成
$ ssh-keygen -t rsa -b 4096 -C "鍵のコメントなど自由記述"
  •  パスワードなし/保存先変更せず
    • 公開鍵の保存先(例:/home/ユーザ/.ssh/id_rsa.pub)
    • 秘密鍵の保存先(例:/home/ユーザ/.ssh/id_rsa)

  • 公開鍵🔒をサーバーに登録[ファイル名を変更 id_rsa.pub → authorized_keys]
    • ファイルの中身は「ssh-rsa xxx中略xxxx== your_comment」
$ cp id_rsa.pub authorized_keys
  • 秘密鍵🔑を自分のPCにコピー(例: C:\Users\ユーザ名.ssh\id_rsa)
    • ファイルの中身は「—BEGIN OPENSSH PRIVATE KEY—xxxxxxx—END xxx—」形式になっているが、Windowsで使うにはpem形式にする必要がある。
    • Windows用Pemファイルに書き換える
$ ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
  • 書き換えたPemファイルは、Windowsのユーザーディレクトリに保管する
    メモ帳などで「C:\Users\ユーザ名.ssh\id_rsa」 を作成して、pemファイルの中身をコピーする
  • ファイルの中身は「—–BEGIN RSA PRIVATE KEY—–xxxx—END xx —-」になっているはず。

  • (必要な場合)authorized_keysファイルの権限を設定する
    • ファイル[rw-(読み書き可)]権 $ chmod 600 ~/.ssh/authorized_keys
    • ディレクトリ[rwx(実行=cdアクセス可)]権 $ chmod 700 ~/.ssh
    • 所有者変更 $ sudo chown kano:kano authorized_keys

  • SSH設定の変更 $ sudo nano /etc/ssh/sshd_config
  • sshd_configに、以下の設定パラメータを追加(鍵認証を有効, パスワード認証を無効, rootのログイン禁止):
    ※rootのログイン禁止は、新しいユーザーでSSH接続できることを確認した後で設定した方がよいです
    • PubkeyAuthentication yes
    • PasswordAuthentication no
    • PermitRootLogin no
  • nanoエディタで、[ctrl]+[s]でsshd_configファイルを保存し、[ctrl]+[x]でnanoエディタを終了する
  • SSHプロセスを再起動
    • このとき設定の記述を失敗すると永久にSSH接続できなくなる場合があるので、OSログイン済みのターミナルを複数起動しておいた方が安心
      つまり rootユーザーのターミナル と 新しいユーザーのターミナル。新しいユーザーで再ログインをテストして失敗しても、rootユーザーで再設定ができる。
    • $ sudo systemctl restart ssh

  • パスワード認証を無効化する(検査)
    • もしも ssh設定ファイル[/etc/ssh/sshd_config]の最初の行に[Include /etc/ssh/sshd_config.d/*.conf]が記載されているならば、[/etc/ssh/sshd_config.d/50-cloud-init.conf]ファイルが存在する場合がある。この追加設定ファイルの中身が[PasswordAuthentication yes]なのでパスワード認証が有効になっている。
    • この場合は、優先度の高いファイル名で設定を上書きする
      $ sudo nano /etc/ssh/sshd_config.d/00-disable-password.conf
      PasswordAuthentication no
    • ログイン検査
      $ ssh ユーザ名@IPアドレス
      下記が表示されたらパスワード認証が無効化されている
      ユーザ名@IPアドレス: Permission denied (publickey).
  • SSHコマンドのログを調べるには
    • c:\> ssh -v -i .ssh/鍵 ユーザ名@IPアドレス

2-2. Linuxサーバーのホスト名変更

ラズパイのホスト名変更を参照して、好きなホスト名に変更します

2-3. 新しいLinuxユーザーでログイン

Windowsのターミナルを起動し、下記コマンドでLinuxにログインできることを確認します。
前提:秘密鍵の保存場所(C:\Users\ユーザ名\.ssh\id_rsa)の場合

  • LinuxにSSH接続 C:\Users\ユーザ名 > ssh -i .ssh/id_rsa Linuxユーザ名@サーバーのIPアドレス

はじめてLinuxにアクセスするときに下記メッセージが表示されます。[yes]とキー入力して[Enter]します。
Are you sure you want to continue connecting (yes/no/[fingerprint])?

2-4. ドメイン取得とDNS

サーバーにアクセスするとき、IPアドレスでは覚えにくいのでIPアドレスの代わりにドメイン名を使います。
IPアドレスは[192.168.0.1]のような数字の並び、ドメイン名は[funnygeekjp.com]のような名前です。
DNSは、取得したドメイン名をIPアドレスに変換する仕組みです。

ドメインの取得

お名前ドットコム または AWS Route53 でドメイン名を取得します。ドメイン名は、年間契約料金がかかります。
ひとつのドメインに、複数のサブドメインを追加することができます。
設定すべき項目のみ記載し、ドメイン取得方法は記載しません。ドメインを契約するサイトで確認してください。

  • ドメイン名を決めること: xxxxxx.xxx
  • サブドメインの所有者を決める
    • aaa.xxxx.xx(サイト1)
    • bbb.xxxx.xx(サイト2)
    • ccc.xxxx.xx(サイト3)

DNSレコードの登録

ドメインおよびサブドメインはDNSサーバーに登録することで、WEBにアクセスするPCが、URLをIPアドレスに変換できるようになります。

  • DNSレコードを登録する
    • aaa.xxx.xx A TTL=3600 x.x.x.x1
    • bbb.xxx.xx A TTL=3600 y.y.y.y1
    • ccc.xxx.xx A TTL=3600 z.z.z.z1

2-5. VScodeを使ってSSH接続

Windowsライクにコピペなど慣れているインターフェースでコーディングしたいならば、VScodeでLinuxにSSH接続します。
前提:VSCodeをインストールしてあること(ダウンロード

WindowsのSSH構成ファイルに下記を記述する。下記はSSH鍵の場合と、パスワードのみの場合の例です。

  Host (好きな名前)
    HostName (IPアドレス)
    IdentityFile .ssh/(秘密鍵pemのファイル名)
    User (ユーザー名)

VScode左下の接続アイコン[><]を押す。接続するホストを選んで、Linuxのフォルダを開けたら成功。

[AWS EC2 Ubuntu 24.04]
VSCode で aws ec2にssh接続しようとするとき、「scpを使用してvscode serverをホストにコピーしています」のまま進まない場合、EC2インスタンスのDNS設定が正しく機能しておらず、VSCode Serverのダウンロード先(Microsoft CDNなど)を名前解決できなかったことが原因の可能性があります。
試しに[$ sudo apt update]を試して正常に終了するか、下記エラーメッセージが表示されるか検査します。
Err:2 http://archive.ubuntu.com/ubuntu noble InRelease
Temporary failure resolving ‘archive.ubuntu.com’

対策:Google DNSとCloudflare DNSを設定してみて、apt updateを再検査してみます。

$ sudo nano /etc/systemd/resolved.conf
------------ 下記を追加します
[Resolve]
DNS=8.8.8.8
FallbackDNS=1.1.1.1

------------ 再起動してみます
$ sudo systemctl restart systemd-resolved

$ sudo apt update とついでに $ sudo apt upgrade を実行して最新のパッケージにしておきます。
今度は、VSCode で先ほどよりも早くSSH接続できるはずです。

コメントを残す