ウェブサイト検索

Linux での最も一般的な SSH コマンドの使用法と構成


概要: このガイドでは、SSH の一般的な使用例について説明します。また、 生産性を向上させるために日常生活で使用できる、一般的に使用される SSH 構成についても説明します

セキュア シェル (SSH) は広く採用されているネットワーク プロトコルで、安全な方法でリモート ホストと通信できるようになります。それらの間のすべての通信を暗号化することでセキュリティを提供します。

Linux で SSH コマンドを使用する方法

このセクションでは、SSH プロトコルの一般的な使用例のいくつかについて説明します。

リモート Linux ホストに接続する

telnetftp、netcat などのプロトコルを使用してリモート Linux ホストと対話するさまざまな方法があります。ただし、暗号化がないため、これらは安全ではありません。 SSH プロトコルを使用すると、ホスト間の安全な通信が可能になります。

リモート ホストと通信するにはSSH クライアントを使用する必要があります。 Linux で使用できる GUI および CLI ベースのクライアントが多数あります。ただし、このガイド全体では、ssh と呼ばれるコマンド ライン ユーティリティを使用します。デフォルトでは、ssh ユーティリティはほとんどの Linux ディストリビューションで利用できます。

SSH コマンドの構文は次のとおりです。

ssh [OPTIONS]  [COMMANDS] [ARGS]

ここで、角括弧 ([]) はオプションの引数を表し、山括弧 (<>) は必須の引数を表します。

ssh クライアントを使用してリモート ホストに接続しましょう。

ssh -l root 192.168.19.130

この例では、-l オプションを使用してログイン名を指定し、宛先は 192.168.19.130 です。正しいパスワードを入力すると、SSH 接続が確立されます。これで、ローカル システムと同じようにリモート ホスト上でコマンドを実行できるようになります。

hostname

セッションを終了するには、終了コマンドまたは ctrl+D キーの組み合わせを使用します。

新しいセッションごとにリモート ホストで認証する必要があることに注意することが重要です。毎回パスワードを入力する必要がないように、SSH パスワードなしのログインを設定できます。

リモートホストでコマンドを実行する

前のセクションでは、リモート ホストとの接続を確立する方法について説明しました。これは、リモート ホストを長期間使用する場合にのみ適しています。場合によっては、リモート ホスト上で 1 つまたは 2 つのコマンドを実行するだけで十分な場合があります。このような場合、長期セッションを作成せずにコマンドを実行できます。

リモート ホストで hostname コマンドを実行してみましょう。

ssh -l root 192.168.19.130 hostname

同様の方法で、リモート Linux マシン上で複数のコマンドを実行できます。

ssh -l root 192.168.19.130 'hostname; pwd'

コマンドは引用符で囲み、セミコロン (;) 文字で区切る必要があることに注意することが重要です。複数のリモート Linux ホストでコマンドを実行する場合は、記事「Pssh – 複数のリモート Linux ホストでコマンドを実行する」を参照してください。

リモートホストでスクリプトを実行する

コマンドと同様に、リモート ホスト上でローカル スクリプトを実行することもできます。これを例で理解してみましょう。

まず、実行可能アクセス許可を持つ単純なシェル スクリプトをローカル マシン上に作成します。

cat script.sh 

hostname
pwd

次に、リモート ホストで実行してみましょう。

ssh [email  'bash -s' < ./script.sh 

この例では、bash の -s オプションを使用して、標準入力からスクリプトを読み取りました。

ホスト間でファイルをコピーする

私たちはファイルやディレクトリを頻繁に操作します。ユーザーが実行する一般的な操作の 1 つは、ディレクトリとファイルのコピーです。ローカル マシンと同様に、scp コマンドを使用してリモート ホスト間でファイルとディレクトリをコピーできます。このコマンドは、SSH プロトコルを使用してファイルを安全にコピーします。

script.sh ファイルをリモート ホストの /tmp ディレクトリにコピーしましょう。

scp script.sh [email :/tmp

次に、ファイルがコピーされたことを確認します。

ssh [email  'ls /tmp/script.sh'

同様の方法で、scp コマンドを使用してディレクトリをコピーできます。ただし、コマンドでは -r オプションを使用する必要があります。

SSH の圧縮を有効にする

SSH は、stdin、stdout、stderr などのすべての可能なデータ ストリームを圧縮する gzip 圧縮アルゴリズムを使用したデータ圧縮をサポートしています。このオプションは、低速なネットワーク接続を使用している場合に非常に便利です。

-C オプションを使用して SSH での圧縮を有効にできます。

ssh -C -l root 192.168.19.130 'hostname' 

SSH の詳細モードを有効にする

Linux ユーザーは、SSH 接続や構成関連のさまざまな問題を調査するために、SSH セッションをデバッグする必要があることがよくあります。このような場合、現在のセッションのデバッグ ログを出力する詳細モードを有効にすることができます。

-v オプションを使用して冗長モードを有効にしましょう。

ssh -v -l root 192.168.19.130 hostname

これに加えて、複数の -v オプションを使用して冗長レベルを上げることができます。

  • -v – 冗長レベルを 1 に設定し、クライアント側のアクティビティに関する詳細を提供します。
  • -vv – 冗長レベルを 2 に設定し、クライアント側とサーバー側のアクティビティに関する詳細を提供します。
  • -vvv – 冗長レベルを 3 に設定し、クライアント側とサーバー側のアクティビティに関するより詳細な情報を提供します。

SSH でサポートされる最大冗長レベルは 3 です。これが実際に動作する様子を見てみましょう。

ssh -vvv -l root 192.168.19.130 hostname

上の例では、debug1 は冗長レベル 1 で有効になったデバッグ メッセージを表します。同様に、debug2debug3 は冗長レベル 1 で有効になったデバッグ メッセージを表します。それぞれ冗長レベル 2 と 3。

SSH のエスケープ シーケンス

SSH でエスケープ シーケンスを使用して、クライアント ターミナル セッションを管理できます。一般的に使用されるエスケープ シーケンスについて、適切な使用例を交えて説明しましょう。

SSHセッションの一時停止

場合によっては、現在の SSH セッションを終了せずに、ローカル マシン上でいくつかのアクティビティを実行する必要があります。このようなシナリオでは、~ + ctrl+z キー シーケンスを使用して現在のセッションを一時停止できます。

まず、リモート ホストにログインし、ホスト名 コマンドを実行します。

ssh -l root 192.168.19.130
hostname

次に、現在のセッションを一時停止するには、まずチルダ (~) 文字を入力し、ctrl+z キーを押します。チルダ (~) 文字は、ctrl+z を押すまで標準出力に表示されないことに注意することが重要です。

次に、セッションが一時停止されたことを確認してみましょう。

jobs

ここでは、現在の SSH セッションがバックグラウンドで実行されていることがわかります。

fg コマンドを使用してセッションを再度再開し、hostname コマンドを実行してみましょう。

fg %1

凍結された SSH セッションを終了する

不安定なネットワークによってセッションが中断された場合に発生する SSH セッションの凍結を見たことがあると思います。ここでは、exit コマンドを使用してセッションを中止することはできません。ただし、"~ + ." キー シーケンスを使用して終了できます。

まず、リモート ホストにログインします。

ssh -l root 192.168.19.130

"~ + ." キーの組み合わせを使用して、現在のセッションを終了します。

この例では、SSH に「192.168.19.130 への接続が終了しました」というメッセージが表示されていることがわかります。

サポートされているエスケープ シーケンスのリスト

興味深い点の 1 つは、サポートされているすべてのエスケープ シーケンスをリストするエスケープ シーケンスがあることです。 「~ + ?」を使用できます。 ” エスケープ シーケンスを使用して、サポートされているエスケープ シーケンスをリストします。

ここで、ヘルプ メニューから出るには Enter キーを押す必要があります。

Linux で SSH を構成する方法

このセクションでは、SSH サーバーを強化するためのサーバー側の構成について説明します。 SSH サーバーは、すべての設定を /etc/ssh/sshd_config ファイルに保存します。 SSH 設定を更新するには root ユーザー アクセスが必要であることに注意することが重要です。

SSH バナーを表示する

ベスト プラクティスとして、SSH 接続を確立する前に常にバナーを表示する必要があります。場合によっては、権限のないユーザーがリモート ホストにアクセスするのを妨げます。この設定を有効にする方法を段階的に見てみましょう。

まず、リモート サーバー上に警告メッセージを含むテキスト ファイルを作成します。

vi /etc/banner.txt 

次に、次のバナー メッセージを追加します。

*********************************************************************
Warning !!! You are trying to log in to techmint.com's server.
All the activities on this server are monitored.
Terminate the session immediately if you are not an authorized user.
*********************************************************************

次に、/etc/ssh/sshd_config ファイルを開き、Banner ディレクティブでファイルを指定します。

Banner /etc/banner.txt

次に、sshd サービスを再起動し、exit コマンドを使用してセッションを終了します。

systemctl restart sshd
exit

最後に、リモート ホストにログインしてバナーを確認します。

ssh -l root 192.168.19.130

ここでは、サーバーが SSH バナーを正しく表示していることがわかります。

SSH ルート ログインを無効にする

これまでは、root ユーザーを使用してリモート ホストにアクセスしました。ただし、これは最小特権の原則に反します。運用環境では、セキュリティを向上させるために、root ユーザーのアクセスは常に制限されています。

PermitRootLogin ディレクティブを使用して、root ユーザーのログインを無効にすることができます。

まず、/etc/ssh/sshd_config ファイルを開き、PermitRootLogin ディレクティブでオプション no を使用します。

PermitRootLogin no

次に、sshd サービスを再起動し、exit コマンドを使用してセッションを終了します。

systemctl restart sshd
exit

最後に、新しい SSH セッションを作成してこれを確認します。

ssh -l root 192.168.19.130

ここで、root ユーザーではリモート ホストにログインできないことがわかります。 root ユーザーのログインを許可するには、同じディレクティブでオプション yes を使用します。

デフォルトのSSHポートの変更

デフォルトでは、SSH は TCP ポート 22 を使用します。ただし、別のポート (8088) で実行するように SSH を設定できます。

まず、/etc/ssh/sshd_config ファイルを開き、8088 値を Port ディレクティブで使用します。

Port 8088

次に、sshd サービスを再起動し、セッションを終了します。

systemctl restart sshd
exit

次に、リモート ホストにログインしましょう。

ssh -p 8088 -l root 192.168.19.130

この例では、-p オプションを使用してポート番号を指定しました。

場合によっては、デフォルト以外のポートでの通信を許可するために、他のいくつかの手順を実行する必要があります。利用可能なポートの特定、ファイアウォール ルール、SELinux 設定の更新など。

この記事では、SSH プロトコルとその一般的な使用例について説明しました。次に、いくつかの一般的なオプションについて説明しました。最後に、SSH サーバーを保護するためのいくつかの設定について説明しました。

Linux での他の最適な SSH コマンドの使用法をご存知ですか?以下のコメント欄であなたのご意見をお聞かせください