Linuxサーバーに接続する主な方法は、SSHプロトコルを使用することです。この接続方法は、転送されるすべてのデータが暗号化されるため、安全です。SSH接続を確立するには、接続先のリモートサーバーとユーザー側のクライアントの両方で設定を行う必要があります。SSH接続用のソフトウェアは数多く存在します。LinuxではOpenSSHパッケージが最も人気があり、Windowsでは主にPuTTYが使用されています。
Ubuntu Server 18.04 を例にサーバー構成を詳しく見て、Linux と Windows からサーバーに接続してみます。
全ての操作は一般ユーザーのアカウントで行います。今回は「mihail」というユーザーを作成し、「root」アカウントはデフォルトで無効になっています。
サーバー側の設定
次のコマンドを実行してパッケージを設定します。
sudo apt install openssh-server
インストールが完了したら、サービスが実行されていることを確認します。次のコマンドを使用します。
systemctl status sshd
ステータスが「アクティブ(実行中)」とは、サービスが有効になっており、正常に動作していることを意味します。
この記事ではネットワーク ファイアウォールを構成しないため、ファイアウォールによる着信接続のブロックを回避するために、必ずファイアウォールを無効にしてください。
次のコマンドを使用します:
sudo ufw disable
この段階では、すでにサーバーに接続できます。デフォルト設定では、サーバーはパスワードベースの認証を使用して標準ポート 22 への接続を許可します。
LinuxからのSSH接続
原則として、OpenSSH クライアントは Linux にデフォルトでインストールされており、追加の手動設定は必要ありません。接続は、ssh コマンドを使用してターミナルから確立できます。この場合のパラメータは、リモート サーバーのユーザー名と IP アドレスです。例として使用しているテスト サーバーには、「mihail」というアカウントが 1 つだけあるため、これを使用します。
ssh [email protected]
初回接続時には、サーバーの公開鍵をデータベースに追加することを確認する必要があるので、「はい」と入力してください。その後、パスワードを入力できます。接続が成功すると、サーバーのコマンドラインのウェルカムメッセージが表示されます。これで、すべてのコマンドがリモートサーバー上で直接実行されます。
Windows からの SSH
PuTTYを開き、接続パラメータを設定します。「接続タイプ」スイッチがSSHになっていることを確認してください。「ホスト名」フィールドにIPアドレスを入力し、「ポート」にデフォルト値の22を入力して、「開く」をクリックします。
初回接続時にPuttyは、このサーバーを信頼するかどうかを確認するメッセージを表示するので、「はい」をクリックしてください。
ログインとパスワードを入力すると、リモート サーバーのコマンド ラインが表示されます。
キーによる認証。セキュリティレベルの向上
クライアントが SSH 経由でサーバーへの安全な接続を確立しようとする場合、接続を許可する前にサーバーはクライアントを認証 (検証) する必要があります。前述のように、通常はパスワードベースの認証がデフォルトで使用されます。ブルートフォース攻撃の手段が常に存在するため、この認証では堅牢なセキュリティは提供されません。また、パスワード認証は、スクリプトを使用した SSH 接続には適用できません。
このタイプのタスクには、キーによる特別な認証方法があります。ポイントは、クライアントが秘密キーと公開キーを生成し、公開キーがサーバーに送信されることです。その後、認証は公開クライアント キーと秘密クライアント キーに基づいて行われるため、サーバーに接続するためにパスワードは必要ありません。優れたレベルのセキュリティを提供するには、秘密キーへのアクセスを制限する必要があります。秘密キーはクライアント側に保存され、ネットワーク経由で転送されないため、この方法はより安全であると考えられています。
Linux でのキーによる認証
ssh-keygen ユーティリティ ソフトウェアを使用して、クライアントで公開キーと秘密キーを生成してみましょう。ツールは、セキュリティを強化するために秘密キーへのパスを変更し、パスフレーズを入力することを提案します。すべての要求で Enter キーを押して、すべてのパラメーターをデフォルトのままにします。
その結果、ホームディレクトリの.sshフォルダ内に、id_rsaとid_rsa.pubという2つのファイルが生成され、それぞれに秘密鍵と公開鍵が格納されます。
その後、公開鍵をサーバーに送信する必要があります。そのためには、「id_rsa.pub」ファイルの内容をサーバー上の「~/.ssh/authorized_keys 」ファイルにコピーします。「 ssh-copy-id 」ツールを使って最も簡単な方法で実行しましょう。通常の接続時と同様に、ログイン名とサーバーのIPアドレスを入力します。パスワードを入力すると、クライアントの公開鍵が自動的にサーバーにコピーされます。以下のコマンドを実行してください。
ssh-copy-id [email protected]
これらをすべて実行すると、サーバーはパスワードの入力を必要としなくなります。
Windows でのキーによる認証
PUTTYGENを開き、「生成」をクリックします。キーを生成するには、マウスを画面上で動かすだけで、ツールがランダムにキーを生成します。
キーが生成されたら、「秘密鍵を保存」をクリックして、ディスク上の秘密鍵ファイルに保存します。パスは任意に設定できますが、後でPuttyで指定する必要があります。次に、ウィンドウ上部から公開鍵をコピーします。
公開鍵をターミナルにコピーするだけで送信できます。Puttyを開いて、通常どおりサーバーに接続します。次に、「.ssh/authorized_keys」ファイルを作成し、他のユーザーがファイルにアクセスできないように制限して、作成者のみがアクセスできるようにします。
mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
ファイルを作成したら、クライアントの公開鍵をその中に入れます。前の段階で、公開鍵をクリップボードにコピーしました。クリップボードの内容をファイルに記録するには、cat コマンドと出力リダイレクトを使用します。
cat > .ssh/authorized_keys
コマンドを入力したら、ターミナルウィンドウでマウスの右ボタンをクリックし、クリップボードの内容を貼り付けます。入力内容を確認するには、「Ctrl+D」キーを押してサーバーから切断します。
ここで、Putty で秘密鍵へのパスを指定して、再度サーバーに接続してみましょう。
今後は、サーバーに接続するにはユーザー名を入力するだけで済みます。適切な秘密鍵を持たない別のデバイスからサーバーに接続しようとすると、サーバーはパスワードを要求します。キーベースの認証を設定したら、パスワードによるアクセスを禁止できます。