導入
システム管理者として習得すべき必須ツールの一つがSSHです。SSH(Secure Shell)は、リモートシステムに安全にログインするためのプロトコルです。Linuxサーバーにリモートアクセスする最も一般的な方法です。このガイドでは、SSHを使用してリモートシステムに接続する方法について説明します。.
コア構文
SSH を使用してリモートシステムに接続するには、ssh コマンドを使用します。Windows を使用している場合は、ターミナルから ssh を実行できるように、OpenSSH のバージョンをインストールする必要があります。PowerShell で作業したい場合は、Microsoft のドキュメントに従って、PowerShell に OpenSSH を追加してください。完全な Linux 環境を利用したい場合は、デフォルトで ssh が含まれる WSL (Windows Subsystem for Linux) をセットアップできます。最後に、3 つ目の軽量なオプションとして、ssh コマンドを含む Windows bash ターミナル環境を提供する Git for Windows をインストールできます。これらはいずれも十分にサポートされているため、どれを使用するかは好みによって異なります。Mac または Linux を使用している場合は、ターミナルに既に ssh コマンドが表示されているはずです。.
コマンドの最も単純な形式は次のとおりです。
ssh remote_hostこの例のremote_hostは、接続先のIPアドレスまたはドメイン名です。このコマンドは、リモートシステムでのユーザー名がローカルシステムでのユーザー名と同じであることを前提としています。.
リモート システム上でユーザー名が異なる場合は、次の構文を使用して指定できます。
ssh remote_username@remote_hostサーバーに接続後、パスワードを入力して本人確認を求められる場合があります。パスワードの代わりに使用するキーを生成する方法については後ほど説明します。.
ssh を終了してローカル シェルに戻るには、次のように入力します。
exitSSH はどのように機能しますか?
SSHは、クライアントプログラムをsshdと呼ばれるsshサーバーに接続することで機能します。前のセクションでは、sshがクライアントプログラムでした。sshサーバーは、指定したremote_host上で既に実行されていました。ほとんどすべてのLinux環境では、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}nano またはお気に入りのテキスト エディターを使用して開きます。
sudo nano /etc/ssh/sshd_configこのファイル内のほとんどのオプションはそのままにしておくことをお勧めします。ただし、いくつか確認しておくと良いオプションがあります。
Port 22ポート宣言は、sshdサーバーが接続を待ち受けるポートを指定します。デフォルトでは22です。特別な理由がない限り、この設定はそのままにしておくことをお勧めします。ポートを変更する場合は、新しいポートへの接続方法を以下で説明します。.
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_keyホストキー宣言は、グローバルホストキーを検索する場所を指定します。ホストキーとは何かについては後ほど説明します。.
SyslogFacility AUTH
LogLevel INFOこれら 2 つの項目は、発生するログ記録のレベルを示します。.
SSH に問題がある場合は、ログ記録レートを上げると問題を発見できる可能性があります。.
LoginGraceTime 120
PermitRootLogin yes
StrictModes yesこれらのパラメータは、ログイン情報を指定します。.
LoginGraceTime は、ログインに成功しない場合に接続を何秒維持するかを指定します。この時間は、通常のログインにかかる時間よりも少し長めに設定するのが良いでしょう。PermitRootLogin は、root ユーザーのログインを許可するかどうかを選択します。su または sudo 経由で昇格した権限を持つユーザーアカウントを作成し、ssh 経由でログインできるようにした場合、サーバーへの root アクセスのリスクを最小限に抑えるために、通常はこの設定を no に変更する必要があります。.strictModes は、認証ファイルが公開されている場合にログイン試行を拒否するセキュリティガードです。これにより、設定ファイルが安全でない場合にログイン試行を阻止できます。.
X11Forwarding yes
X11DisplayOffset 10これらのパラメータは、X11転送と呼ばれる機能を設定します。これにより、リモートシステムのグラフィカルユーザーインターフェース(GUI)をローカルシステムで表示できるようになります。このオプションはサーバー側で有効にし、SSHクライアントで-Xオプションを使用して接続する際に指定する必要があります。変更を加えたら、ファイルを保存して閉じてください。nanoを使用している場合は、Ctrl+Xを押し、プロンプトが表示されたらYを押してEnterを押してください。/etc/ssh/sshd_configで設定を変更した場合は、変更を適用するためにsshdサーバーをリロードしてください。
sudo systemctl reload ssh変更が期待通りに動作することを確認するために、徹底的にテストしてください。変更を行う際は、複数のターミナルセッションを開いておくことをお勧めします。これにより、必要に応じて設定を元に戻すことができますが、ロックアウトされることはありません。.
鍵を使ってSSHにログインする方法
パスワードを使用したリモート ログインは便利ですが、キーベースの認証を設定するとより高速かつ安全になります。.
キーベースの認証はどのように機能しますか?
キーベース認証は、秘密鍵と公開鍵という2つの鍵ペアを作成することで機能します。秘密鍵はクライアントマシン上に保存され、安全に秘密に保管されます。公開鍵は誰にでも公開できますし、アクセスしたい任意のサーバー上に配置することもできます。キーペアを使用して接続しようとすると、サーバーは公開鍵を使用して、クライアントコンピューター宛てのメッセージを作成します。このメッセージは秘密鍵でのみ読み取ることができます。クライアントコンピューターは適切なレスポンスをサーバーに送信し、サーバーはクライアントが正当なクライアントであることを認識します。このプロセスは、鍵を設定すると自動的に実行されます。.
SSHキーを作成する方法
SSHキーは、ログイン元のコンピューター上に作成する必要があります。通常はローカルマシンです。.
コマンドラインに次のように入力します。
ssh-keygen -t rsa鍵ファイル自体にパスワードを設定するよう求められる場合がありますが、これはあまり一般的ではないため、コマンドをEnterキーを押してデフォルト設定を受け入れるようにしてください。鍵は~/.ssh/id_rsa.pubと~/.ssh/id_rsaに作成されます。.
次のコードを入力して、.ssh ディレクトリに変更します。
cd ~/.sshファイルの権限を確認します:
ls -lOutput
-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」に変更します。
PasswordAuthentication no変更する必要のない他の2つの設定は(このファイルをまだ変更していないと仮定します)、PubkeyAuthenticationとChallengeResponseAuthenticationです。これらはデフォルトで設定されており、以下のように読み込まれます。
PubkeyAuthentication yes
ChallengeResponseAuthentication no変更を加えたら、ファイルを保存して閉じます。.
SSH デーモンをリロードできるようになりました。
sudo systemctl reload sshこれでパスワード認証は無効になり、サーバーは SSH キー認証経由でのみアクセス可能になります。.
結果
SSHの使い方を学ぶことは、今後のクラウドコンピューティングの取り組みに非常に役立ちます。様々なオプションを使いこなしていくうちに、より高度な機能を発見し、作業が楽になるでしょう。SSHは安全で軽量、そして様々な状況で役立つことから、人気が衰えていません。.









