序章

システム管理者として習得するための重要なツールの1つは、SSHです。

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

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

コア構文

SSHを使用してリモートシステムに接続するには、 ssh 指図。

Windowsを使用している場合、次のことができるようにするには、OpenSSHのバージョンをインストールする必要があります。 ssh ターミナルから。 PowerShellで作業する場合は、 Microsoftのドキュメントに従って、PowerShellにOpenSSHを追加できます。 完全なLinux環境を利用したい場合は、Linux用のWindowsサブシステムであるWSLセットアップできます。 ssh デフォルトでは。 最後に、軽量の3番目のオプションとして、 Git for Windows をインストールできます。これにより、 ssh 指図。 これらはそれぞれ十分にサポートされており、どちらを使用するかは好みに応じて決まります。

MacまたはLinuxを使用している場合は、すでに ssh ターミナルで使用可能なコマンド。

コマンドの最も簡単な形式は次のとおりです。

  1. ssh remote_host

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

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

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

  1. ssh remote_username@remote_host

サーバーに接続すると、パスワードを入力して本人確認を求められる場合があります。 後で、パスワードの代わりに使用するキーを生成する方法について説明します。

sshセッションを終了してローカルシェルセッションに戻るには、次のように入力します。

  1. exit

SSHはどのように機能しますか?

SSHは、クライアントプログラムをsshサーバーに接続することで機能します。 sshd.

前のセクションでは、 ssh クライアントプログラムでした。 sshサーバーはすでに remote_host 私たちが指定したこと。

ほぼすべてのLinux環境で、 sshd サーバーは自動的に起動するはずです。 何らかの理由でサーバーが実行されていない場合は、Webベースのコンソールまたはローカルシリアルコンソールを介してサーバーに一時的にアクセスする必要がある場合があります。

sshサーバーを起動するために必要なプロセスは、使用しているLinuxのディストリビューションによって異なります。

Ubuntuでは、次のように入力してsshサーバーを起動できます。

  1. sudo systemctl start ssh

これでsshdサーバーが起動し、リモートでログインできるようになります。

SSHを設定する方法

SSHの構成を変更すると、sshdサーバーの設定が変更されます。

Ubuntuでは、メインのsshd構成ファイルは次の場所にあります。 /etc/ssh/sshd_config.

編集する前に、このファイルの現在のバージョンをバックアップしてください。

  1. sudo cp /etc/ssh/sshd_config{,.bak}

を使用して開きます nano またはお気に入りのテキストエディタ:

  1. sudo nano /etc/ssh/sshd_config

このファイルのほとんどのオプションはそのままにしておきます。 ただし、確認したいことがいくつかあります。

/ etc / ssh / sshd_config
Port 22

ポート宣言は、sshdサーバーが接続をリッスンするポートを指定します。 デフォルトでは、これは 22. 特に理由がない限り、この設定はそのままにしておく必要があります。 ポートをdo変更した場合は、後で新しいポートに接続する方法を説明します。

/ 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ユーザーにログインを許可するかどうかを選択します。

ほとんどの場合、これは次のように変更する必要があります no 昇格された特権にアクセスできるユーザーアカウントを作成したとき( su また sudo)そして、サーバーへのルートアクセスを取得するリスクを最小限に抑えるために、sshを介してログインできます。

strictModes は、認証ファイルが誰でも読み取り可能である場合にログインの試行を拒否する安全ガードです。

これにより、構成ファイルが安全でない場合のログイン試行が防止されます。

/ etc / ssh / sshd_config
X11Forwarding yes
X11DisplayOffset 10

これらのパラメーターは、 X11Forwardingと呼ばれる機能を構成します。 これにより、ローカルシステムでリモートシステムのグラフィカルユーザーインターフェイス(GUI)を表示できます。

このオプションはサーバーで有効にし、SSHクライアントで指定する必要があります。 -X オプション。

変更を加えたら、ファイルを保存して閉じます。 使用している場合 nano、 押す Ctrl+X、プロンプトが表示されたら、 Y 次にEnterキーを押します。

で設定を変更した場合 /etc/ssh/sshd_config、変更を実装するためにsshdサーバーをリロードすることを確認してください。

  1. sudo systemctl reload ssh

変更を徹底的にテストして、期待どおりに動作することを確認する必要があります。

変更を加えている間は、いくつかのターミナルセッションを開いておくとよいでしょう。 これにより、必要に応じて、ロックアウトせずに構成を元に戻すことができます。

キーを使用してSSHにログインする方法

パスワードを使用してリモートシステムにログインできると便利ですが、キーベースの認証を設定する方が高速で安全です。

キーベースの認証はどのように機能しますか?

キーベースの認証は、秘密キー公開キーのペアのキーを作成することで機能します。

秘密鍵はクライアントマシンにあり、保護されて秘密にされています。

公開鍵は、誰にでも与えることができ、アクセスしたい任意のサーバーに配置することができます。

キーペアを使用して接続しようとすると、サーバーは公開キーを使用して、秘密キーでのみ読み取ることができるクライアントコンピューターへのメッセージを作成します。

次に、クライアントコンピューターは適切な応答をサーバーに送り返し、サーバーはクライアントが正当であることを認識します。

このプロセスは、キーを構成した後に自動的に実行されます。

SSHキーを作成する方法

からにログインするコンピューターでSSHキーを生成する必要があります。 これは通常、ローカルマシンです。

コマンドラインに次のように入力します。

  1. ssh-keygen -t rsa

キーファイル自体にパスワードを設定するように求められる場合がありますが、これはかなりまれな方法であり、プロンプトからEnterキーを押して、デフォルトを受け入れる必要があります。 キーは〜/ .ssh / id_rsa.pub および〜/ .ssh /id_rsaに作成されます。

に変更します .ssh 次のように入力してディレクトリを作成します。

  1. cd ~/.ssh

ファイルの権限を確認します。

  1. 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 ファイルは、所有者のみが読み取りおよび書き込み可能です。 これはそれを秘密にするのに役立ちます。

The id_rsa.pub ただし、ファイルは共有でき、このアクティビティに適した権限があります。

公開鍵をサーバーに転送する方法

現在サーバーへのパスワードベースのアクセス権がある場合は、次のコマンドを発行して公開鍵をサーバーにコピーできます。

  1. ssh-copy-id remote_host

これにより、SSHセッションが開始されます。 パスワードを入力すると、公開鍵がサーバーの承認済み鍵ファイルにコピーされます。これにより、次回はパスワードなしでログインできます。

クライアント側のオプション

SSH経由で接続するときに提供できるオプションのフラグがいくつかあります。

これらのいくつかは、リモートホストの設定と一致させるために必要な場合があります sshd 構成。

たとえば、ポート番号を変更した場合 sshd 構成では、次のように入力して、クライアント側でそのポートを一致させる必要があります。

  1. ssh -p port_number remote_host

注: sshポートを変更することは、隠すことを通じてセキュリティを提供するための合理的な方法です。 通常どおり、ポート22で広く知られているサーバー展開へのssh接続を許可し、パスワード認証を有効にしている場合、多くの自動ログイン試行によって攻撃される可能性があります。 キーベースの認証を排他的に使用し、非標準ポートでsshを実行することは、使用できる最も複雑なセキュリティソリューションではありませんが、これらを最小限に抑える必要があります。

リモートシステムで1つのコマンドのみを実行する場合は、次のようにホストの後に指定できます。

  1. ssh remote_host command_to_run

リモートマシンに接続して認証すると、コマンドが実行されます。

前に述べたように、両方のコンピューターでX11転送が有効になっている場合は、次のように入力してその機能にアクセスできます。

  1. ssh -X remote_host

コンピュータに適切なツールがある場合、リモートシステムで使用するGUIプログラムは、ローカルシステムでウィンドウを開きます。

パスワード認証の無効化

SSHキーを作成した場合は、パスワードのみの認証を無効にすることでサーバーのセキュリティを強化できます。 コンソールとは別に、サーバーにログインする唯一の方法は、サーバーにインストールした公開鍵とペアになる秘密鍵を使用することです。

警告:この手順に進む前に、サーバーに公開鍵がインストールされていることを確認してください。 そうしないと、ロックアウトされます!

root またはsudo権限を持つユーザーとして、 sshd 構成ファイル:

  1. 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デーモンをリロードできます。

  1. sudo systemctl reload ssh

これでパスワード認証が無効になり、SSHキー認証を介してのみサーバーにアクセスできるようになります。

結論

SSHの使い方を学ぶことは、将来のクラウドコンピューティングの取り組みに大きな利益をもたらします。 さまざまなオプションを使用すると、生活を楽にすることができるより高度な機能が見つかります。 SSHは、安全で軽量であり、さまざまな状況で役立つため、引き続き人気があります。

次に、 SFTP を使用して、コマンドラインファイル転送を実行する方法について学習することをお勧めします。