SSHとは?設定から接続方法まで詳しく解説

SSHとは?設定から接続方法まで詳しく解説のアイキャッチイメージ

SSHとは?

SSHとはSecure Shellと言う言葉から名付けられた、安全にリモート接続を行うためのプロトコルです。他のリモート接続方法としてTelnetなどがありますが、これらでリモート接続を行う場合は、通信内容はそのままネットワークに流れることになります。SSHを用いれば、パスワードを含む全ての通信内容は暗号化され、通信経路上における盗聴やデータの改ざんを防ぐことができます。また、認証に鍵データを利用することで、パスワードの漏えいによるなりすましも防ぐことができます。この記事では、SSH通信で公開鍵認証方式によるリモート接続が出来るようになることを目標とし、接続先となるSSHサーバーの設定や、接続元となるパソコンなどのコンピュータ上でのsshコマンドの使い方や、鍵データの作成方法を説明します。

SSHサーバーの起動方法

SSH接続を行うためには、接続を受け付けるSSHサーバーが必要です。クラウドサーバーやレンタルサーバーを利用していて、SSHで接続することが前提となっている場合には、SSHサーバーは既に起動しているはずです。この記事では、Ubuntu 18.04.3を最小構成でインストールした状態から始めることを想定して説明します。SSHサーバーのインストール方法や設定ファイルの場所は、Linuxディストリビューションによって異なる可能性があります。ご了承ください。

SSHサーバーのインストール

Ubuntuを最小構成でインストールした場合には、SSHサーバーはインストールされていません。以下のようにaptコマンドでインストールします。

インストールした直後からSSHサーバーは起動した状態になります。systemctl status sshdと入力して確認しましょう。

Active: active (running)と表示されていれば、SSHサーバーは起動しています。もし、Active: inactive (dead)と表示されている場合は、インストールはされているが起動していない状態です。その場合はsudo systemctl start sshdと入力して、SSHサーバーを起動してください。注意点を説明しますと、SSHサーバーが起動している状態ですでに、パスワードを利用して外部からSSH接続ができるようになっています。インターネット経由で外部からの接続を受け付ける環境では、この瞬間からSSHサーバーのデフォルトの待ち受けである22番ポートに向かって、アタック(ログインを試みようとする攻撃)が行われる可能性があります。よって最初の設定作業を行う場合は、インターネットからの接続を受け付けない環境か、ファイアウォールなどの機能で、不正なアクセスを防ぐ環境下で行ってください。

パスワード使用したsshコマンドによるログイン

これからの設定作業を行うために、まずはパスワードを使用してsshコマンドでログインします。LAN内の他のコンピューターなどから、SSHクライアントアプリケーションを使用して接続してください。ここでは別のコンピューターから、Linuxのsshコマンドを使用して接続します。この記事では、後の鍵ファイルを使用する手順のために、まずはパスワードによる接続を行っていますが、もし公開鍵データをクライアントからサーバーに送信する方法が他に存在する場合は、後述するSSHサーバーの設定で、インストール直後からパスワードによるログインを無効にした方がより安全です。sshコマンドでログインするには、引数にユーザー名と接続先のサーバー名またはIPアドレスを@で繋いだ文字列を指定します。

クライアントから初めてアクセスするサーバーの場合、""Are you sure ... connecting?""と確認が出ますが、yesと入力してください。そして、続いて""user1@xxx.xxx.xxx.xxx's password:""と表示されパスワードの入力を求められます。指定したLinuxユーザーのパスワードを入力してください。なお、キーボードからタイプしても、パスワードの文字列は表示されないようになっています。ログインに成功すると、接続先のサーバーのシェルが起動し、コマンドラインで入力を受け付ける状態になります。パスワードでログインできることが確認できたら、ログアウトして大丈夫です。コマンドラインでexitと入力してログアウトし、SSHクライアントを終了してください。

鍵ファイルを使用したsshコマンドの実行方法

ここまででSSHサーバーが正常に稼働し、パスワードでログインできるようになりました。しかし、パスワードによる認証はパスワードが漏えいする可能性や、パスワードを予測してログインを試みるような攻撃を受ける可能性があります。そこで、より安全性を高めるために鍵ファイルを使用してSSH接続を行い、パスワードによるログインを無効にします。

鍵ファイルの生成

SSH接続に使用する鍵ファイルを作成します。以下の作業は、クライアントマシン上で実行してください。環境はクライアント側もLinuxを想定しています。もし、クライアント側の環境にSSHクライアント用のパッケージがインストールされていない場合は、インストールしてください。Ubuntuの場合はsudo apt install openssh-clientでインストールできます。鍵ファイルの生成にはssh-keygenコマンドを使用します。

-tオプションは作成する鍵の種類です。rsaを指定してください。-bオプションは鍵の大きさです。値が大きいほど複雑な鍵となり安全性が増しますが、4096という数字で十分です。-fオプションは生成される秘密鍵ファイルの名前です。任意の名前でよいですが、ここではmy_ssh_keyという名前にします。コマンドを実行すると、Enter passphrase (empty for no passphrase):という表示でパスフレーズの入力を求められます。パスフレーズを設定すると、鍵を使ってSSH接続をする際にそのパスフレーズを入力する必要があります。つまり鍵を使うためのパスワードです。この手順ではパスフレーズは設定せず、入力無しでSSH接続することとします。パスフレーズを設定しない場合は、何も入力せずそのままエンターキーを押してください。確認用のEnter same passphrase again:の入力もそのままエンターキーを押してください。コマンドの実行が完了すると、カレントディレクトリに指定した通りmy_ssh_keyという鍵ファイルと、もう一つmy_ssh_key.pubというファイルの合計2ファイルが作成されます。my_ssh_keyはSSH接続する際に使用する秘密鍵です。このファイルは利用者だけが持つべきもので、外部に公開してはいけません。対して、my_ssh_key.pubは公開鍵です。このファイル内の情報を接続先サーバーに登録して、認証を行うことになります。

公開鍵の登録

SSHサーバーに鍵ファイルを用いて接続をするためには、事前にクライアントが使用する秘密鍵と対になる公開鍵をサーバーに登録しておく必要があります。ここでは登録を行うために、まずはscpコマンドを使用してパスワードを用いたSSH接続で公開鍵ファイルをサーバーに送信することとします。

scpコマンドは第1引数にコピー元のファイル、第2引数に接続先ユーザー名@接続先ホスト名またはIPアドレス:接続先のコピー先ディレクトリと指定します。これで公開鍵が接続先サーバーに送信されましたが、まだ登録は完了していません。引き続きサーバー側で作業を行います。先ほどの作業で、サーバー側のuser1のホームディレクトリにはscpでコピーされたmy_ssh_key.pubがあります。この公開鍵の内容を~/.ssh/authorized_keysファイルに追記してください。

初めてこの作業を行う場合は、まだauthorized_keysが存在しておらず、上記コマンドを実行することで作成されます。これでサーバー側の登録作業は完了です。正しく登録されていれば、先ほど生成した秘密鍵を使ってクライアントからSSH接続ができます。

-iオプションで秘密鍵ファイルを指定することで、パスワード無しでログインできるようになります。

パスワード接続を無効にする

鍵ファイルを使用したSSH接続に成功したならば、パスワードによるSSH接続を無効にしてセキュリティを高める方がよいでしょう。そのためには、SSHサーバーの設定ファイルを編集します。SSHサーバーの設定ファイルは/etc/ssh/sshd_configです。これをテキストエディターで開いてください。

#PasswordAuthentication yesという行があります。デフォルトではパスワードログインを許可する設定になっていますので、PasswordAuthentication noという行を追加してパスワードログインを無効にします。設定ファイルの編集が完了したら、SSHサーバーをリロードしてください。

クライアント側でパスワードによる接続を試して、接続が拒否されれば設定は正しく反映されています。

サーバー管理はSSHでセキュアに

SSHサーバーのインストール/起動方法から、公開鍵認証方式によるSSHログインまでを説明してきました。Linuxサーバー管理においては、新たにユーザーを登録しSSH接続を許可することもあるでしょう。SSHサーバーの設定方法やクライアントの接続方法を知ることは、正しくシステムを管理するための第一歩とも言えます。また、コンピューターやサービスのクラウド化が進む現在、クライアントとしてインターネットを経由して遠隔地にあるサーバーに接続する機会は増えています。そのような環境において、通信内容を守るためにはSSHによる接続は必須です。コンピューターの性能の向上や技術の向上により、パスワードによる認証は安全性が高いとは決して言えなくなっています。セキュアにリモート接続を行うために、ぜひ公開鍵認証方式でSSHを利用することをお勧めします。

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。