Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Day-7: Linux SSH Authentication | 100 Days of DevOps

2025年09月28日に「Dev.to」が公開したITニュース「Day-7: Linux SSH Authentication | 100 Days of DevOps」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

SSHは、リモートサーバーへ安全に接続するためのプロトコル。頻繁なパスワード入力を避けるため、公開鍵と秘密鍵を使った「パスワードなしログイン」が推奨される。鍵を生成し、公開鍵をサーバーに設定する具体的な手順と、その利便性・安全性を学ぶ。

ITニュース解説

システムエンジニアを目指す皆さんにとって、コンピュータの世界は様々な機械がネットワークでつながり、互いに協力し合って動いているように見えるだろう。その中でも、特に重要なのが「リモートサーバー」と呼ばれる、遠隔地にあるコンピューターを操作する技術だ。ウェブサイトを動かすサーバーや、大量のデータを処理するサーバーなど、私たちは自分の目の前にあるパソコンから、これらのサーバーに指示を送ったり、状態を確認したりする必要がある。この遠隔操作を安全に行うための、まさに基礎となる技術がSSH(Secure Shell)だ。

SSHは、たとえるなら、インターネットという広大な公衆の場で、誰にも盗み聞きされることなく、安全に遠くのコンピューターと会話するための「暗号化された秘密の電話回線」のようなものだ。かつて使われていたTelnetのような古い技術では、会話の内容が丸見えになってしまうため、パスワードなどの重要な情報が簡単に盗まれてしまう危険があった。しかし、SSHはすべての通信を暗号化するため、あなたのユーザー名やパスワード、送受信するデータが、悪意のある第三者から保護される。開発者やシステム管理者、そしてDevOpsエンジニアといったプロフェッショナルたちが、リモートサーバーへのログイン、コマンドの実行、ファイルの転送、システムの管理といったあらゆる作業を安全に行うために、SSHは不可欠なツールとして広く使われている。

では、実際にSSHを使ってリモートサーバーに接続するにはどうすればいいのだろうか。基本の接続方法は非常にシンプルで、ssh ユーザー名@ホスト名という形式のコマンドを自分のパソコンで実行するだけだ。ここでいう「ユーザー名」とは、接続したいリモートサーバーに存在するアカウントの名前を指す。そして「ホスト名」は、そのリモートサーバーのネットワーク上の住所、具体的にはIPアドレス(例: 172.16.238.10のような数字の羅列)か、ドメイン名(例: example.comのような覚えやすい名前)のどちらかを指定する。例えば、IPアドレスが172.16.238.10のサーバーに「tony」というユーザーで接続したい場合は、ssh tony@172.16.238.10と入力する。このコマンドを実行すると、通常は「パスワードを入力してください」というメッセージが表示されるので、指定したユーザーのパスワードを入力する。正しく認証されれば、あなたはまるでそのサーバーの目の前にいるかのように、コマンドを直接入力して操作できるようになる。

しかし、毎回パスワードを入力するのは、想像以上に手間がかかる作業だ。特に、複数のサーバーに頻繁にログインしたり、自動化スクリプトを使ってたくさんのサーバーに同じ処理を実行させたりする場合、毎回手動でパスワードを入力するのは非効率的で、非常に煩わしい。さらに、パスワードが推測されやすいものだったり、複数のシステムで使い回していたりすると、セキュリティ上の大きなリスクにもなりかねない。

そこで登場するのが、SSHキーによる「パスワードなしログイン」という画期的な方法だ。これはパスワードの代わりに、特殊な「鍵のペア」を使って認証を行う仕組みである。この鍵のペアは、「秘密鍵(Private Key)」と「公開鍵(Public Key)」という二つの部分から構成されている。この方法の基本的な考え方は以下の通りだ。まず、自分の手元のパソコン(クライアントマシンと呼ぶ)で、この秘密鍵と公開鍵のペアを生成する。次に、このうち公開鍵だけを、接続したいリモートサーバーにコピーして配置しておく。そして、自分がリモートサーバーに接続しようとすると、サーバーはあなたの手元のパソコンにある秘密鍵と、自分が持っている公開鍵が正しいペアであるかどうかを照合する。もし両者が正しくペアであることを確認できれば、パスワードを入力することなく、瞬時にログインが許可されるのだ。

SSHキーを生成する手順は非常に簡単だ。自分のパソコンのターミナル(コマンドプロンプトやPowerShellのようなもの)で、ssh-keygen -t rsa -b 4096というコマンドを実行する。-t rsaはRSAという暗号方式を使うことを指定し、-b 4096は鍵の長さを4096ビットにする、つまりより強固な鍵を作ることを意味する。このコマンドを実行すると、いくつか質問されるが、基本的にはEnterキーを押してデフォルトの設定を受け入れて問題ない。特に重要なのは「パスフレーズ」の入力を求められた際に、何も入力せずにEnterキーを二回押して「空」にしておくことだ。パスフレーズを設定すると、秘密鍵を使うたびにそのパスフレーズの入力が求められるため、自動化の妨げになってしまう。この操作によって、あなたのホームディレクトリ内の.sshという隠しフォルダの中に、id_rsaというファイル(これがあなたの秘密鍵)と、id_rsa.pubというファイル(これがあなたの公開鍵)が作成される。秘密鍵は絶対に他人に知られてはならない、まさに家の鍵そのものなので、厳重に管理する必要がある。一方、公開鍵は文字通り公開しても問題ない鍵であり、リモートサーバーにコピーするために利用する。

次に、この生成した公開鍵をリモートサーバーにコピーする作業を行う。これにはssh-copy-id -i ~/.ssh/id_rsa.pub ユーザー名@ホスト名という便利なコマンドを利用する。例えば、先ほどの172.16.238.10というサーバーのtonyユーザーに公開鍵をコピーしたい場合は、ssh-copy-id -i ~/.ssh/id_rsa.pub tony@172.16.238.10と実行する。このコマンドは、あなたがリモートサーバーに初めて公開鍵を配置する際に、一度だけそのサーバーのパスワードを尋ねてくる。これは、その公開鍵を配置する権限があなたにあることを確認するためだ。一度パスワードを入力し、公開鍵のコピーが完了すれば、もうそのサーバーへのログインにパスワードは必要なくなる。

そしていよいよ、パスワードなしでのログインを試すことができる。ssh tony@172.16.238.10と入力して実行してみてほしい。今度はパスワードの入力を求められることなく、直接リモートサーバーのシェル(コマンド入力画面)に接続できるはずだ。この瞬間、あなたの作業効率は格段に向上するだろう。

このパスワードなしログインの仕組みは、複数のアプリケーションサーバーを管理するような実際の現場で非常に役立つ。例えば、あなたが「thor」というユーザーで作業するジャンプホスト(複数のサーバーへのアクセスを中継するサーバー)から、stapp01、stapp02、stapp03という3つの異なるアプリケーションサーバーに接続する必要があるとしよう。それぞれのサーバーには異なるユーザー名(tony、steve、banner)とパスワードが設定されている。このような状況で、それぞれのサーバーに対して先ほどのssh-copy-id -i ~/.ssh/id_rsa.pub ユーザー名@ホスト名コマンドを実行して公開鍵をコピーしておけば、ジャンプホストのthorユーザーは、どのアプリケーションサーバーにもパスワードなしでスムーズにログインできるようになる。これにより、一つ一つのサーバーに手動でログインする手間が省け、作業が非常に効率的になるのだ。

さらに一歩進んだ利用方法として、「パスワードなしsudo」という設定もある。サーバー上で何らかの管理作業やシステム設定の変更を行う際、通常はsudoコマンドを使うことになるが、この時もデフォルトではパスワードの入力を求められる。もし自動化スクリプトの中でsudoコマンドを使いたい場合、やはりパスワード入力がネックになる。この問題を解決するには、各アプリケーションサーバーでsudo visudoというコマンドを実行し、sudoersファイルを編集する必要がある。このファイルの中に、ユーザー名 ALL=(ALL) NOPASSWD:ALLという行を追加するのだ。例えば、「tony」ユーザーに対してこの設定を行うと、tonyユーザーはパスワードなしでsudoコマンドを実行できるようになる。ただし、この設定は非常に強力な権限を与えるため、セキュリティリスクも増大する。慎重に、そして必要最小限の範囲で適用することが重要だ。

このように、SSHキー認証の仕組みを理解し、適切に設定することで、システム管理作業の自動化が非常に容易になり、複数のサーバーを効率的に管理できるようになる。そして何より、推測されやすいパスワードに依存するよりも、SSHキーを使う方が、サーバーへのアクセスセキュリティを大幅に強化できるのだ。これは、システムエンジニアとして働く上で、非常に強力な武器となる技術であり、ぜひマスターしてほしい。

関連コンテンツ

関連IT用語