SSHを使用してリモートサーバーに接続する方法
序章
システム管理者として習得するための重要なツールの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
ターミナルで使用可能なコマンド。
コマンドの最も簡単な形式は次のとおりです。
- ssh remote_host
The remote_host
この例では、接続しようとしているIPアドレスまたはドメイン名です。
このコマンドは、リモートシステムのユーザー名がローカルシステムのユーザー名と同じであることを前提としています。
リモートシステムでユーザー名が異なる場合は、次の構文を使用してユーザー名を指定できます。
- ssh remote_username@remote_host
サーバーに接続すると、パスワードを入力して本人確認を求められる場合があります。 後で、パスワードの代わりに使用するキーを生成する方法について説明します。
sshセッションを終了してローカルシェルセッションに戻るには、次のように入力します。
- exit
SSHはどのように機能しますか?
SSHは、クライアントプログラムをsshサーバーに接続することで機能します。 sshd
.
前のセクションでは、 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
. 特に理由がない限り、この設定はそのままにしておく必要があります。 ポートをdo変更した場合は、後で新しいポートに接続する方法を説明します。
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ユーザーにログインを許可するかどうかを選択します。
ほとんどの場合、これは次のように変更する必要があります no
昇格された特権にアクセスできるユーザーアカウントを作成したとき( su
また sudo
)そして、サーバーへのルートアクセスを取得するリスクを最小限に抑えるために、sshを介してログインできます。
strictModes
は、認証ファイルが誰でも読み取り可能である場合にログインの試行を拒否する安全ガードです。
これにより、構成ファイルが安全でない場合のログイン試行が防止されます。
X11Forwarding yes
X11DisplayOffset 10
これらのパラメーターは、 X11Forwardingと呼ばれる機能を構成します。 これにより、ローカルシステムでリモートシステムのグラフィカルユーザーインターフェイス(GUI)を表示できます。
このオプションはサーバーで有効にし、SSHクライアントで指定する必要があります。 -X
オプション。
変更を加えたら、ファイルを保存して閉じます。 使用している場合 nano
、 押す 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
ファイルは、所有者のみが読み取りおよび書き込み可能です。 これはそれを秘密にするのに役立ちます。
The id_rsa.pub
ただし、ファイルは共有でき、このアクティビティに適した権限があります。
公開鍵をサーバーに転送する方法
現在サーバーへのパスワードベースのアクセス権がある場合は、次のコマンドを発行して公開鍵をサーバーにコピーできます。
- ssh-copy-id remote_host
これにより、SSHセッションが開始されます。 パスワードを入力すると、公開鍵がサーバーの承認済み鍵ファイルにコピーされます。これにより、次回はパスワードなしでログインできます。
クライアント側のオプション
SSH経由で接続するときに提供できるオプションのフラグがいくつかあります。
これらのいくつかは、リモートホストの設定と一致させるために必要な場合があります sshd
構成。
たとえば、ポート番号を変更した場合 sshd
構成では、次のように入力して、クライアント側でそのポートを一致させる必要があります。
- ssh -p port_number remote_host
注: sshポートを変更することは、隠すことを通じてセキュリティを提供するための合理的な方法です。 通常どおり、ポート22で広く知られているサーバー展開へのssh接続を許可し、パスワード認証を有効にしている場合、多くの自動ログイン試行によって攻撃される可能性があります。 キーベースの認証を排他的に使用し、非標準ポートでsshを実行することは、使用できる最も複雑なセキュリティソリューションではありませんが、これらを最小限に抑える必要があります。
リモートシステムで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は、安全で軽量であり、さまざまな状況で役立つため、引き続き人気があります。
次に、 SFTP を使用して、コマンドラインファイル転送を実行する方法について学習することをお勧めします。