Tutorial

SSHを使用してリモートサーバーに接続する方法

Linux BasicsUbuntuSecurityNetworkingSystem Tools

はじめに

SSHは、システム管理者としてマスター必須のツールの一つです。

SSH(Secure Shellの略)は、リモートシステムへの安全なログインに使用されるプロトコルです。 リモートLinuxサーバーにアクセスする最も一般的な方法です。

このガイドでは、SSHを使用してリモートシステムに接続する方法を説明します。

基本的な構文

SSHを使用してリモートシステムに接続するには、sshコマンドを使用します。コマンドの最も基本的な形式は次のとおりです。

  • ssh remote_host

この例のremote_hostは、接続しようとしているIPアドレスやドメイン名です。

このコマンドは、リモートシステム上のユーザー名がローカルシステムのユーザー名と同じであると想定します。

リモートシステムのユーザー名と異なる場合、この構文を使用して指定できます。

  • ssh remote_username@remote_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ユーザーのログインを許可するかどうかを選択します。

通常、susudoを介して高度な権限にアクセスできるユーザーアカウントを作成し、sshログインできる場合は、noに変更します。

strictModesは、認証ファイルが誰でも開ける状態になると、ログインを拒否するセーフティーガードです。

これにより、設定ファイルが安全でないときのログインが防げます。

/etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10

これらのパラメータは、X11転送という機能を設定します。これは、リモートシステムのグラフィカルユーザーインターフェイス(GUI)をローカルシステムに表示する機能です。

このオプションは、サーバー上で有効になり、-Xオプションに接続するSSHクライアントに与えられるものです。

変更後、CTRL + XYENTERキーを押してファイルを保存して閉じます。

/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つの設定、PubkeyAuthenticationChallengeResponseAuthenticationも、(このファイルの設定を変更したことがなければ)変更する必要がありません。これらはデフォルトで設定されていますが、以下のように表示されます。

/etc/ssh/sshd_config
PubkeyAuthentication yes
ChallengeResponseAuthentication no

変更後、ファイルを保存して閉じます。

SSHデーモンをリロードします。

  • sudo systemctl reload ssh

パスワード認証が無効になり、サーバーはSSH鍵認証でしかログインできなくなっています。

まとめ

SSHは、それが一般的なアクティビティだから、という理由だけでも知っておく価値があります。

さまざまなオプションを使用していくうちに、より高度な機能の発見もあり、作業がもっと楽になります。SSHは、あらゆる状況において安全、軽量かつ便利であるため、高い人気を維持しています。

Creative Commons License