はじめに
SSHは、システム管理者としてマスター必須のツールの一つです。
SSH(Secure Shellの略)は、リモートシステムへの安全なログインに使用されるプロトコルです。 リモートLinuxサーバーにアクセスする最も一般的な方法です。
このガイドでは、SSHを使用してリモートシステムに接続する方法を説明します。
基本的な構文
SSHを使用してリモートシステムに接続するには、ssh
コマンドを使用します。コマンドの最も基本的な形式は次のとおりです。
- ssh remote_host
この例のremote_host
は、接続しようとしているIPアドレスやドメイン名です。
このコマンドは、リモートシステム上のユーザー名がローカルシステムのユーザー名と同じであると想定します。
リモートシステムのユーザー名と異なる場合、この構文を使用して指定できます。
- ssh [email protected]_host
サーバーに接続すると、パスワードを提供して身元の確認を求められることがあります。後半で、パスワードの代わりに鍵を生成して使用する方法を説明します。
sshセッションを終了してローカルシェルセッションに戻るには、次のように入力します。
- exit
SSHの機能
SSHは、クライアントプログラムをsshd
と呼ばれるsshサーバーに接続することにより動作します。
前のセクションでは、ssh
はクライアントプログラムでした。sshサーバーは、指定したremote_host
で既にに稼働しています。
サーバーでは、sshd
サーバーが既に稼働しているはずです。そうでない場合は、Webベースのコンソールかローカルシリアルコンソールからサーバーにアクセスする必要があります。
sshサーバーの開始に必要なプロセスは、使用するLinuxディストリビューションによって異なります。
Ubuntuでは、次のように入力してsshサーバーを起動します。
- sudo systemctl start ssh
sshdサーバーが起動し、リモートログインできます。
SSHの設定方法
SSHの設定変更は、すなわちsshdサーバーの設定変更を意味します。
Ubuntuでは、メインのsshd設定ファイルは/etc/ssh/sshd_config
にあります。
ファイルを編集する前に現在のバージョンをバックアップします。
- sudo cp /etc/ssh/sshd_config{,.bak}
テキストエディターで開きます。
- sudo nano /etc/ssh/sshd_config
このファイルのオプションの大半をそのまま残します。ただし、見ておきたいオプションも次のように数点あります。
/etc/ssh/sshd_config
Port 22
ポート宣言では、sshdサーバーの接続待ち受けポートを指定します。 デフォルトのポートは22
です。 この設定は特に理由がある場合を除いて変更しない方がよいでしょう。ポートを変更する場合は、後半で新しいポートに接続する方法を説明します。
/etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key
ホスト鍵宣言で、グローバルホスト鍵を探す場所を指定します。ホスト鍵については後ほど説明します。
/etc/ssh/sshd_config
SyslogFacility AUTH LogLevel INFO
これらの2項目は、ログインレベルを示します。
SSHに問題がある場合、ログイン数を増やせば問題の発見に役立ちます。
/etc/ssh/sshd_config
LoginGraceTime 120 PermitRootLogin yes StrictModes yes
これらのパラメータは、ログイン情報のいくつかを指定します。
LoginGraceTime
は、ログインまでの制限時間を設定します。
この時間は、通常のログインにかかる時間よりも若干長めに設定するのがよいでしょう。
PermitRootLogin
は、rootユーザーのログインを許可するかどうかを選択します。
通常、su
かsudo
を介して高度な権限にアクセスできるユーザーアカウントを作成し、sshログインできる場合は、no
に変更します。
strictModes
は、認証ファイルが誰でも開ける状態になると、ログインを拒否するセーフティーガードです。
これにより、設定ファイルが安全でないときのログインが防げます。
/etc/ssh/sshd_config
X11Forwarding yes X11DisplayOffset 10
これらのパラメータは、X11転送という機能を設定します。これは、リモートシステムのグラフィカルユーザーインターフェイス(GUI)をローカルシステムに表示する機能です。
このオプションは、サーバー上で有効になり、-X
オプションに接続するSSHクライアントに与えられるものです。
変更後、CTRL + X
、Y
、ENTER
キーを押してファイルを保存して閉じます。
/etc/ssh/sshd_config
の設定を変更したら、必ずsshdサーバーをリロードして変更を実装させます。
- sudo systemctl reload ssh
変更を徹底的にテストして、期待通りに動作するか確認します。
変更を完了する際、セッションをいくつかアクティブにするのがよいでしょう。これにより、必要に応じて設定が取り消せます。
鍵を使用してSSHにログインする方法
パスワードでリモートシステムにログインするのも便利ですが、鍵認証をセットアップするとはるかに便利です。
鍵認証の機能の仕組み
鍵認証は、秘密鍵と公開鍵の鍵ペアの作成により機能します。
秘密鍵は、クライアントマシンにあり、安全に隠されます。
公開鍵は、誰にでも公開可能で、アクセスしたいサーバーに配置されます。
鍵ペアを使用して接続を試みると、サーバーは公開鍵を使用して秘密鍵がないと読めないクライアントコンピュータに宛てたメッセージを作成します。
クライアントコンピューターは、適切なレスポンスをサーバーに送信し、サーバーはクライアントが正当であると識別します。
このプロセス全体は、鍵をセットアップすると自動的に実行されます。
SSH鍵を作成する方法
SSH鍵は、ログイン元のコンピューターで生成されます。これは通常、ローカルマシンです。
コマンドラインに次を入力します。
- ssh-keygen -t rsa
enterキーを押してデフォルトを承認します。鍵は、~/.ssh/id_rsa.pubと~/.ssh/id_rsaで作成されます。
次のように入力して、.ssh
ディレクトリに移動します。
- cd ~/.ssh
ファイルの権限を確認します。
- ls -l
Output-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
ご覧のとおり、id_rsa
ファイルは、所有者のみが読み取り・書き込み可能です。このような仕組みで秘密が保持されます。
ただし、id_rsa.pub
ファイルは、共有可能で、このアクティビティに相応しい権限を持ちます。
公開鍵をサーバーに転送する方法
現在パスワード認証によるサーバーへのアクセス権があれば、このコマンドを発行すれば公開鍵をサーバーにコピーできます。
- ssh-copy-id remote_host
これにより、SSHセッションが開始します。パスワードを入力すると、公開鍵がサーバーの認証鍵ファイルにコピーされます。これにより、次回のログイン時からパスワードが不要になります。
クライアント側のオプション
SSH接続する際に選択できるオプションフラグがいくつかあります。
そのうちのいくつかは、リモートホストのsshd
設定と合わせる必要があります。
たとえば、sshd
設定でポート番号を変更した場合は、次のように入力してクライアント側のポートを合わせます。
- ssh -p port_number remote_host
リモートシステムで実行するコマンドが1つだけの場合は、ホストの後にそのように指定できます。
- ssh remote_host command_to_run
リモートマシンに接続し、認証が行われ、コマンドが実行されます。
前述のように、双方のコンピューターでX11転送が有効になっている場合、その機能にアクセスするには次のように入力します。
- ssh -X remote_host
コンピューターに適切なツールが入っていれば、リモートシステムで使用中のGUIプログラムのウィンドウがローカルシステムで開きます。
パスワード認証を無効にする
SSHの鍵を作成すると、パスワードのみの認証を無効にしてサーバーのセキュリティを強化できます。 コンソールを別にすれば、サーバーにログインする唯一の方法は、サーバーにインストールした公開鍵とペアをなす秘密鍵を使用することです。
警告:このステップに進む前に、サーバーに公開鍵をインストールしておくようにしてください。そうでないとロックアウトされてしまいます。
rootまたはsudo権限を持つユーザーとして、sshd
設定ファイルを開きます。
- sudo nano /etc/ssh/sshd_config
Password Authentication
と書いてある行を検索し、行頭の #
を削除してコメントを解除します。次に、その値をno
に変更します。
/etc/ssh/sshd_config
PasswordAuthentication no
さらに2つの設定、PubkeyAuthentication
とChallengeResponseAuthentication
も、(このファイルの設定を変更したことがなければ)変更する必要がありません。これらはデフォルトで設定されていますが、以下のように表示されます。
/etc/ssh/sshd_config
PubkeyAuthentication yes ChallengeResponseAuthentication no
変更後、ファイルを保存して閉じます。
SSHデーモンをリロードします。
- sudo systemctl reload ssh
パスワード認証が無効になり、サーバーはSSH鍵認証でしかログインできなくなっています。
まとめ
SSHは、それが一般的なアクティビティだから、という理由だけでも知っておく価値があります。
さまざまなオプションを使用していくうちに、より高度な機能の発見もあり、作業がもっと楽になります。SSHは、あらゆる状況において安全、軽量かつ便利であるため、高い人気を維持しています。