WEBSYSスタッフ日誌

国立大学法人電気通信大学社会人履修証明プログラムWEBSYSの公式スタッフブログです。単なる学び直しで終わらせません!最新情報を発信いたしますので、フォローをお願いします。ご不明点等についてはメール、DM📩にてお気軽にお問い合わせ下さい。

快適なSSHライフを送るための設定

はじめに

はじめまして。WEBSYSスタッフの大塚です。

ウェブシステムデザインプログラムでは、演習環境として受講生一人一人に専用のコンピュータ (仮想マシン) を提供しています。 この仮想マシンにログインする方法のひとつが、SSHというものです。

今回は「快適なSSHライフ」と題して、SSHの便利な設定をいくつか紹介したいと思います。 紹介する内容は以下の通りです。

想定環境

以降の設定例では、以下の環境を想定して説明していきます。

  • クライアント (ログインする側)
    • OS: Windows 11 21H2
    • ユーザ名: taro
  • サーバ (ログインされる側)
    • OS: Ubuntu 20.04.4 LTS
    • IPアドレス: 192.0.2.1 *1
    • ユーザ名: risaju *2
    • 認証方法: パスワード、または鍵ファイル

macOSのPCが手元にないため確信を持てないのですが、どのOSでも同様に設定できると思います。

基本的なログイン

まずは何も設定しない状態でログインすることを考えてみます。 なお、以下の実行例はコマンドプロンプトで行ったものです。

C:\Users\taro>ssh risaju@192.0.2.1
risaju@192.0.2.1's password:

ユーザ名とIPアドレス、そしてパスワードを打つ必要がありますね。

設定ファイルの作成

設定の第一歩として、設定ファイルを作成してみましょう。

C:\Users\taro\.ssh\config という場所に、以下の内容でファイルを作成します。

Host myserver
    Hostname 192.0.2.1
    User risaju

上の設定ファイルを作成すると、ログインするコマンドは以下の通りになります。

C:\Users\taro>ssh myserver
risaju@192.0.2.1's password:

ユーザ名とIPアドレスmyserver という名前に置き換えることができました。 もちろん、この名前は設定ファイルを編集することでお好きなものに変えられます。

鍵ファイルの生成

設定ファイルによって打つ項目の数は減りましたが、それでもパスワードを毎回求められるのはなかなかの手間です。

そこで鍵ファイルとssh-agentというものを使い、認証の手間を減らしてみましょう。

まずは以下のコマンドで鍵ファイルを生成します。

C:\Users\taro>ssh-keygen -C myserver+20230526@myclient
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\taro/.ssh/id_rsa): C:\Users\taro\.ssh\id_rsa_myserver
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
...

コマンドに -C myserver+20230526@myclient と付けると、鍵ファイル内のコメントを変更できます。 ここでは サーバの名前+日付@クライアントの名前 の形式にして、他の鍵ファイルと区別しやすくしました。

コマンドを実行すると、保存先と鍵ファイルに設定するパスワードを聞かれるので適宜入力します。 パスワードは無しにすることもできますが、セキュリティのために設定することを強くおすすめします。

鍵ファイルが生成できると、C:\Users\taro\.ssh の中に2つのファイルが作成されます。

  • id_rsa_myserver: 鍵の本体です。パスワードと同等なものなので、流出しないよう注意しなくてはなりません。
  • id_rsa_myserver.pub: 鍵が合っているか確認するための情報です。サーバに対して設定する際に使います。

鍵ファイルによる認証

鍵ファイルをパスワードの代わりとして使うには、サーバに鍵の情報を置いておく必要があります。

具体的には、以下の手順を行います。

C:\Users\taro>scp .ssh\id_rsa_myserver.pub myserver:
risaju@192.0.2.1's password:
id_rsa_myserver.pub                                                                   100%  581    29.9KB/s   00:00

C:\Users\taro>ssh myserver
...
risaju@myserver:~$ mkdir .ssh
# 次のエラーが出たとしても問題ありません
mkdir: ディレクトリ `.ssh' を作成できません: ファイルが存在します
risaju@myserver:~$ chmod 700 .ssh
risaju@myserver:~$ cat id_rsa_myserver.pub >> .ssh/authorized_keys
risaju@myserver:~$ rm id_rsa_myserver.pub

上の手順では、id_rsa_myserver.pub の内容をサーバにある ~/.ssh/authorized_keys というファイルに追記しています。

実はこれをまとめて行うssh-copy-idというコマンドがあるのですが、残念ながらWindowsmacOSには標準で入っていないようでした。

サーバに鍵の情報を置いた後は、鍵ファイルの場所を設定ファイル (C:\Users\taro\.ssh\config) に追記して設定完了です。

Host myserver
    Hostname 192.0.2.1
    User risaju
    IdentityFile ~/.ssh/id_rsa_myserver

設定が完了すれば、次回からは鍵ファイルのパスワードを求められるようになるはずです。

C:\Users\taro>ssh myserver
Enter passphrase for key 'C:\Users\taro/.ssh/id_rsa_myserver':

ssh-agentの利用

単に鍵ファイルを設定するだけでは、聞かれるパスワードが変わるのみで手間が減っていません。

しかしssh-agentと組み合わせれば、パスワードを解除した後の鍵を覚えさせることでログインの手間を省くことができます。

Windowsではssh-agentが無効化されているので、有効化するところから始めます。 なお、以下の sc コマンドは管理者権限で実行してください。

C:\Users\taro>sc config ssh-agent start= auto
[SC] ChangeServiceConfig SUCCESS

C:\Users\taro>sc start ssh-agent

SERVICE_NAME: ssh-agent
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 12980
        FLAGS              :

ssh-agentが利用可能になると、以下のようにして鍵を覚えさせることができます。

C:\Users\taro>ssh-add .ssh\id_rsa_myserver
Enter passphrase for .ssh\id_rsa_myserver:
Identity added: .ssh\id_rsa_myserver (myserver+20230526@myclient)

この状態でログインすれば、パスワードを求められることはありません。

C:\Users\taro>ssh myserver
...
risaju@myserver:~$

ちなみにWindowsの場合、ssh-agentは再起動後も鍵を覚えたままになっています。 覚えさせた鍵を取り除くには、以下のコマンドを実行します。

# 特定の鍵を取り除く
C:\Users\taro>ssh-add -d .ssh\id_rsa_myserver
Identity removed: .ssh\id_rsa_myserver (myserver+20230526@myclient)

# 全ての鍵を取り除く
C:\Users\taro>ssh-add -D
All identities removed.

おわりに

今回はSSHの便利な設定として、設定ファイルから鍵ファイル、ssh-agentについて紹介しました。

SSHには他にもポートの転送といった便利な機能がありますが、それはまた別な機会に紹介できればと思います。

他の方々のブログでもよく取り上げられている内容だったと思いますが、どなたかのお役に立てれば嬉しいです。

*1:例示用として定められているので、試しても繋がりません。

*2:電通大のキャラクターから名前をお借りしました。