SSHを使用してリモートサーバーに接続する方法
序章
システム管理者として習得するための重要なツールの1つは、SSHです。
SSH、または Secure Shell は、リモートシステムに安全にログオンするために使用されるプロトコルです。 これは、リモートLinuxサーバーにアクセスするための最も一般的な方法です。
このガイドでは、SSHを使用してリモートシステムに接続する方法について説明します。
コア構文
SSHを使用してリモートシステムに接続するには、ssh
コマンドを使用します。
Windowsを使用している場合、端末からssh
を実行できるようにするには、OpenSSHのバージョンをインストールする必要があります。 PowerShellで作業する場合は、 Microsoftのドキュメントに従って、PowerShellにOpenSSHを追加できます。 完全なLinux環境を利用したい場合は、Linux用のWindowsサブシステムであるWSLをセットアップできます。これにはデフォルトでssh
が含まれます。 最後に、軽量の3番目のオプションとして、 Git for Windows をインストールできます。これは、ssh
コマンドを含むネイティブのWindowsbashターミナル環境を提供します。 これらはそれぞれ十分にサポートされており、どちらを使用するかは好みに応じて決まります。
MacまたはLinuxを使用している場合は、ターミナルでssh
コマンドを使用できます。
コマンドの最も簡単な形式は次のとおりです。
ssh remote_host
この例のremote_host
は、接続しようとしているIPアドレスまたはドメイン名です。
このコマンドは、リモートシステムのユーザー名がローカルシステムのユーザー名と同じであることを前提としています。
リモートシステムでユーザー名が異なる場合は、次の構文を使用してユーザー名を指定できます。
ssh remote_username@remote_host
サーバーに接続すると、パスワードを入力して本人確認を求められる場合があります。 後で、パスワードの代わりに使用するキーを生成する方法について説明します。
sshセッションを終了してローカルシェルセッションに戻るには、次のように入力します。
exit
SSHはどのように機能しますか?
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
このファイルのほとんどのオプションはそのままにしておきます。 ただし、確認したいことがいくつかあります。
/ 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ユーザーにログインを許可するかどうかを選択します。
ほとんどの場合、(su
またはsudo
を介して)昇格された特権にアクセスでき、sshを介してログインできるユーザーアカウントを作成した場合は、これをno
に変更する必要があります。 、サーバーへのルートアクセスを取得するリスクを最小限に抑えるため。
strictModes
は、認証ファイルが誰でも読み取り可能である場合、ログインの試行を拒否する安全ガードです。
これにより、構成ファイルが安全でない場合のログイン試行が防止されます。
/ etc / ssh / sshd_config
X11Forwarding yes X11DisplayOffset 10
これらのパラメーターは、 X11Forwardingと呼ばれる機能を構成します。 これにより、ローカルシステムでリモートシステムのグラフィカルユーザーインターフェイス(GUI)を表示できます。
このオプションはサーバーで有効にし、-X
オプションとの接続中にSSHクライアントで指定する必要があります。
変更を加えたら、ファイルを保存して閉じます。 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
ファイルは、所有者のみが読み取りおよび書き込み可能です。 これはそれを秘密にするのに役立ちます。
ただし、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
に変更できます。
/ 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は、安全で軽量であり、さまざまな状況で役立つため、引き続き人気があります。
次に、 SFTP を使用して、コマンドラインファイル転送を実行する方法について学習することをお勧めします。