ウェブサイト検索

リモート接続をSSH経由で管理する方法を学ぶ


クライアントとLinuxサーバー間の安全なリモート通信を管理したいですか?ここに、リモート接続を管理するためのいくつかのセキュアシェル(SSH)ツールがあります。

Secure Shellプロトコルは、クライアント/サーバーアプリケーションを介してリモートマシンに接続する一般的な方法です。これにより、ssh、scp、sftpなどのツールセットを利用して、セキュアな認証プロセスとそれに続く暗号化された通信が保証されます。このため、これらのツールはtelnet、rcp、rloginといった他の古いリモートコマンド実行ツールセットに取って代わります。

このガイドでは、あなたのマシンにOpenSSHサーバー/クライアントサービスをインストールして有効化する方法を学びます。また、システムにアクセスし、リモート管理を行い、ファイルを転送するために必要なすべてのコマンド(SSHツール)についても説明します。

SSHの始め方

デフォルトでは、ほとんどのLinuxシステムにはsshクライアントおよびサーバーアプリケーションが含まれています。RHELおよびFedoraディストリビューションでsshツールを含むパッケージは、openssh、openssh-server、openssh-clientです。grepコマンドを使用して、インストールされたリストからsshツールを取得します:

yum list installed | grep openssh

Ubuntuにはopensshパッケージを含むopenssh-clientパッケージのみが含まれています。以下のようにgrepコマンドを使用して、Ubuntuにおけるopensshパッケージのリストを表示します:

sudo dpkg --list | grep openssh

sudo apt-get install openssh-server

SSHサービスを開始/有効にする

opensshサービスの管理はディストリビューションごとに異なる場合があり、デフォルトの設定に関係なく、自動的には起動しません。以下のコマンドセットを使用して、Linuxマシン上でサービスが稼働していることを確認してください:

systemctl status sshd.service #for Fedora and RHEL
systemctl status ssh #for Ubuntu

動作していない場合は、以下の手順でサービスステータスを確認してください:

systemctl start sshd.service #for Fedora and RHEL
systemctl ssh start #for Ubuntu

システム起動時にopenssh-serverを即座に開始するには:

systemctl enable sshd.service
systemctl ssh enable

SSHクライアントツールの使い方

LinuxシステムのリモートアクセスにSSHプロトコルを利用するための多くのツールの中で、最も頻繁に使用されるのはリモートコード実行とログインのためのsshコマンドであり、scpやrsyncはクライアントとサーバー間で1つ以上のファイルをコピーするのに便利です。

このセクションでは、効率的なリモート管理のために前述のコマンドの詳細を深く掘り下げて説明します。

リモートログイン

SSHは、sshdサービスを実行しているLinuxサーバーのリモート構成に最も頻繁に使用するコマンドです。sshコマンドを使用して、コマンド実行のためにLinuxサーバーにログインできるか確認してください。

別のLinuxマシンを使用してサーバーにログインすることもできますし、次のようにlocalhost上でシミュレーションすることでそのアイデアを得ることもできます:

X.X.X.X(X.X.X.XはリモートデバイスのIPアドレスです)でUbuntuアカウントにリモートログインするには:

ssh ubuntu@X.X.X.X

ローカルユーザーとしてリモートログインするには:

ssh localhost

リモートサーバーに初めてログインする場合、システムへの接続確認が求められますので、yesと入力し、ユーザーアカウントのパスワードを入力してください。

ログイン後は、リモートコマンドの実行を通常のログインと同様に続けることができます。唯一の違いは、リモート通信が暗号化されていることです。

作業が完了したら、exit コマンドを入力してセッションを終了し、ローカルシステムに戻ります。リモートシェルが閉じられない場合は、~.キーも同様の作業を行い、「Connection to X.X.X.X closed」と出力されます。

リモート実行

sshコマンドはリモートシステム上でコマンドを実行し、ローカルマシンに出力を返します。例えば、

次のコマンドは、リモートサーバー上でubuntuユーザーとして実行され、hostnameを返します:

ssh ubuntu@X.X.X.X hostname

オプションやフラグを含むコマンドを実行するには、次のように二重引用符で囲みます:

ssh ubuntu@X.X.X.X "cat /tmp/new_file"

上記のコマンドは、上記のファイルの内容をあなたのローカル画面に表示します。

サーバーでX11フォワーディングを有効にすることで、接続し直すことなく複数のコマンドを実行することもできます。/etc/sshディレクトリ内のsshd_configファイルを開き、X11 Forwardingをyesに設定します。

次のようにコマンドを実行します:

ssh -X ubuntu@X.X.X.X hostname & cat /tmp/new_file/ & exit

scpおよびrsyncによるファイルコピー

scpコマンドは、リモートからローカルシステムへ、またはその逆にファイルを転送/コピーすることを可能にします。その機能はrcpコマンドに似ていますが、RSA暗号化通信が使用されています。いくつかの例を以下に示します。

リモートマシンの/etc/demoディレクトリから/tmpフォルダにファイルを次のようにコピーします:

scp ubuntu@X.X.X.X:/home/ubuntu/demo/file /tmp<strong> </strong>

これにより、再帰的なコピーが可能になり、コマンドにディレクトリを指定すると、その階層にあるすべてのファイルやフォルダが別のローカルディレクトリにコピーされます。

scp -r localhost:/home/ubuntu/ /tmp

ファイルやディレクトリのバックアップにはscpコマンドを使用することもできますが、rsyncはいくつかの理由でより優れたバックアップユーティリティです。

  • scpはファイル/ディレクトリの権限と日時を保持できないという欠点があります。
  • すでにコピーされたファイルやディレクトリを識別することもできません。

さて、上記のディレクトリの内容をリストして、ファイルのアクセス権と作成時刻を以下のように表示します:

ls -l /etc/demo /tmp/demo

上記のscpコマンドを繰り返し、ディレクトリを再リストして、タイムスタンプからすでにコピーされたファイル/ディレクトリを置き換えているかどうかを確認してください。

scp コマンドの -p フラグ はタイムスタンプや書き込み権限を維持するのに役立つかもしれませんが、すでにコピーされたファイルを置き換えてしまいます。これらの短所を克服するために、バックアップツールとして rsync を使用してください。以下の例を続けるために、まず /tmp ディレクトリのファイルを削除してください。以下のように、-a フラグを使って再帰的にアーカイブし、-v オプションを使って詳細出力を表示して、/home/ubuntu/demo のファイルを /tmp ディレクトリにコピーします:

rsync -av ubuntu@X.X.X.X:/home/ubuntu/demo /tmp

/tmpディレクトリをリストして、ファイルまたはディレクトリの作成時刻がどのように保持されるかを確認してください。

最後に、rsyncコマンドを再実行して、ファイルがコピーされないことを確認します。

SSHを知る

この記事は、Linuxサーバーのリモート管理に最も広く使用されているプロトコルについてのガイドです。ファイルのコピーと管理の作業を楽にするためのいくつかのヒントやコツとともに、最も重要なSSHコマンドの使い方を示します。

SSHコマンドやツール、その機能を理解し始めることは、システムやサーバー管理に対する見方を変えることができます。なぜなら、それはSSHだけでなくLinuxターミナルの機能も解放するからです。これは強力なツールであり、大きなセキュリティを提供するとともに、一つのガイドでは網羅できないほどのさらなる機能もあります。

関連記事: