快適なSSHライフを送るための設定
はじめに
はじめまして。WEBSYSスタッフの大塚です。
ウェブシステムデザインプログラムでは、演習環境として受講生一人一人に専用のコンピュータ (仮想マシン) を提供しています。 この仮想マシンにログインする方法のひとつが、SSHというものです。
今回は「快適なSSHライフ」と題して、SSHの便利な設定をいくつか紹介したいと思います。 紹介する内容は以下の通りです。
想定環境
以降の設定例では、以下の環境を想定して説明していきます。
- クライアント (ログインする側)
- OS: Windows 11 21H2
- ユーザ名: taro
- サーバ (ログインされる側)
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というコマンドがあるのですが、残念ながらWindowsとmacOSには標準で入っていないようでした。
サーバに鍵の情報を置いた後は、鍵ファイルの場所を設定ファイル (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には他にもポートの転送といった便利な機能がありますが、それはまた別な機会に紹介できればと思います。
他の方々のブログでもよく取り上げられている内容だったと思いますが、どなたかのお役に立てれば嬉しいです。