リモートサーバーに接続するためのSSHの使用方法

紹介

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

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

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

GithubからフロントエンドアプリケーションをDigitalOcean App Platformを使用してデプロイしてください。DigitalOceanにアプリのスケーリングを任せましょう。

コア構文

SSHを使用してリモートシステムに接続するには、sshコマンドを使用します。

Windowsを使用している場合、ターミナルからsshを実行できるようにするには、OpenSSHのバージョンをインストールする必要があります。PowerShellで作業する場合は、Microsoftのドキュメントに従ってOpenSSHをPowerShellに追加できます。完全なLinux環境を利用したい場合は、WSLをセットアップすることができます。これにより、デフォルトでsshが含まれます。最後に、軽量な第三のオプションとして、Git for Windowsをインストールすることができます。これにより、sshコマンドが含まれたネイティブのWindows bashターミナル環境が提供されます。これらのいずれも十分にサポートされており、使用することを選択するのは好みの問題です。

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

コマンドの最も直接的な形式は次の通りです:

  1. ssh remote_host

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

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

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

  1. ssh remote_username@remote_host

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

SSHセッションを終了し、ローカルのシェルセッションに戻るには、次のように入力してください:

  1. exit

SSHはどのように動作しますか?

SSHは、クライアントプログラムをsshdと呼ばれるSSHサーバーに接続することで動作します。

前のセクションでは、sshがクライアントプログラムでした。指定したremote_hostSSHサーバーがすでに実行されていました。

ほとんどの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です。特別な理由がない限り、この設定をそのままにしておくことが良いでしょう。ポートを変更した場合は、後で新しいポートに接続する方法を示します。変更する場合、後で新しいポートに接続する方法を示します。

/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

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

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

変更を保存してファイルを閉じた後は、変更を有効にするためにsshサーバーを再読み込みする必要があります:

変更した場合は、設定を適用するために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 ファイルは所有者に対して読み取り可能で書き込み可能です。これにより、秘密に保つことができます。

ただし、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. 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は安全で軽量であり、さまざまな状況で有用であるため、人気が持続しています。

次に、コマンドラインファイル転送を行うためのSFTPの操作方法について学ぶことを検討してみてください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server