Ubuntu環境でのSSHの詳細なインストールと使用

Ubuntu環境でのSSHの詳細なインストールと使用

SSH は Secure Shell の略で、安全な伝送プロトコルです。Ubuntu クライアントは SSH を介してリモート サーバーにアクセスできます。

SSHの紹介と動作メカニズム

SSH の紹介

ftp、POP、telnet などの従来のネットワーク サービス プログラムは、パスワードやデータをネットワーク上でプレーン テキストで送信するため、悪意のある人物によって簡単に傍受される可能性があり、本質的に安全ではありません。さらに、これらのサービス プログラムのセキュリティ検証方法にも弱点があり、中間者攻撃によって簡単に攻撃されてしまいます。いわゆる「中間者」攻撃手法では、「中間者」が実際のサーバーを装ってサーバーに送信されたデータを受信し、次にユーザーを装って実際のサーバーにデータを送信するというものです。サーバーとユーザー間のデータ転送が「仲介者」によって改ざんされると、深刻な問題が発生します。

昔々、Tatu Yl?nen というフィンランドのプログラマーが、SSH (Secure SHell の略) と呼ばれるネットワーク プロトコルとサービス ソフトウェアを開発しました。 SSH を使用すると、送信されるすべてのデータを暗号化できるため、「中間者」攻撃が不可能になり、DNS および IP スプーフィングも防止できます。さらなる利点としては、送信されるデータが圧縮されるため、送信速度を高速化できることが挙げられます。 SSH には多くの機能があり、多くの人が Secure Shell を単なる Telnet の代替品と考えているものの、ネットワーク接続を保護するために使用できます。 POP、X、PPP、FTP などの他のネットワーク通信を、ローカル システムまたはリモート システム上の Secure Shell を介して転送できます。 CVS やその他の TCP トラフィックなど、他の種類のネットワーク トラフィックを転送することもできます。さらに、TCP ラッパーを使用した Secure Shell を使用して、接続のセキュリティを強化することもできます。さらに、Secure Shell には、Oracle などのアプリケーションに使用できる便利な機能がいくつかあり、SecurID カードのようなリモート バックアップや追加認証にも使用できます。

SSHの仕組み

SSH はクライアント部分とサーバー部分の 2 つの部分に分かれています。

サーバーはバックグラウンドで実行され、クライアントからの接続要求に応答するデーモン プロセスです。サーバーは通常、sshd プロセスであり、一般に公開キー認証、キー交換、対称キー暗号化、安全でない接続などのリモート接続の処理を提供します。

クライアントには、ssh プログラムと、scp (リモート コピー)、slogin (リモート ログイン)、sftp (セキュア ファイル転送) などのその他のアプリケーションが含まれています。

その動作メカニズムは、おおよそ、ローカル クライアントがリモート サーバーに接続要求を送信するというものです。サーバーは要求パッケージと IP アドレスを確認し、キーを SSH クライアントに送信します。次に、ローカル クライアントがキーをサーバーに送り返し、接続が確立されます。今お話ししたのは、SSH 接続の一般的なプロセスです。SSH 1.x と SSH 2.x では接続プロトコルに若干の違いがあります。

SSH はスーパーサーバー (inetd) を使用せずに独自に動作するように設計されています。inetd 上の tcpd を介して SSH プロセスを実行することは可能ですが、まったく必要ありません。 SSH サーバーを起動すると、sshd が実行され、デフォルトのポート 22 でリッスンします (# ps -waux | grep sshd を使用して、sshd が正しく実行されているかどうかを確認できます)。SSH が inetd 経由で起動されていない場合、SSH は接続要求を待機し続けます。リクエストが届くと、SSH デーモンは接続を処理する子プロセスを生成します。

しかし、著作権や暗号化アルゴリズムの制限により、現在では多くの人が OpenSSH に切り替えています。 OpenSSH は SSH の無料の代替手段です。

SSH はクライアント ソフトウェアとサーバー ソフトウェアで構成されており、互換性のない 2 つのバージョン (1.x と 2.x) があります。 SSH 2.x クライアント プログラムを使用して SSH 1.x サーバー プログラムに接続することはできません。 OpenSSH 2.x は SSH 1.x と 2.x の両方をサポートします。

SSH クライアント openssh-client および openssh-server

別のマシンの SSH にログインするだけの場合は、openssh-client をインストールするだけで済みます (Ubuntu ではデフォルトでインストールされていますが、インストールされていない場合は sudoapt-get install openssh-client を実行します)。このマシンで SSH サービスを開きたい場合は、openssh-server をインストールする必要があります。

1. クライアントをインストールする

Ubuntu にはデフォルトで ssh クライアントがインストールされています。

sudo apt-get install ssh または sudo apt-get install openssh-client
sshキー生成 

(デフォルト値を設定するにはEnterキーを押します)

デフォルトでは、それぞれ秘密鍵と公開鍵である id_rsa ファイルと id_rsa.pub ファイルが生成されます。

注: sudo apt-get installsall ssh コマンドの実行中にエラーが発生し、インストールが失敗した場合は、sudo apt-get install openssh-client を使用してインストールできます。

サーバーの IP が 192.168.1.1、ssh サービスのポート番号が 22、サーバーに root という名前のユーザーが存在するとします。

ssh を使用してサーバーにログインするコマンドは次のとおりです。

>ssh –p 22 ルート@192.168.1.1
>ルートユーザーのパスワードを入力してください

2. サーバーをインストールする

Ubuntu にはデフォルトで SSH サーバーがインストールされていません。次のコマンドを使用してインストールします。

sudo apt-get で openssh-server をインストールします

次に、sshserver が起動しているかどうかを確認します (または、「netstat -tlp」コマンドを使用します)。

ps -e|grep ssh

ssh-agent だけがある場合は、ssh-server はまだ起動していません。/etc/init.d/ssh start を実行する必要があります。sshd が表示されている場合は、ssh-server が起動しています。

そうでない場合は、次のように開始できます。

sudo /etc/init.d/ssh を起動します

実際、特別な要件がない場合は、OpenSSH サーバーはここにインストールされます。しかし、さらに設定することで、OpenSSH のログイン時間を短縮し、より安全にすることができます。これらはすべて、openssh 構成ファイル sshd_config を変更することによって実現されます。

SSH 設定

ssh-server 構成ファイルは /etc/ssh/sshd_config にあり、ここで SSH サービス ポートを定義できます。デフォルトのポートは 22 ですが、222 などの他のポート番号に定義することもできます。次に、SSH サービスを再起動します。

sudo /etc/init.d/sshresart

設定ファイル /etc/ssh/sshd_config を変更することで、ssh ログイン ポートを変更し、root ログインを禁止することができます。ポートを変更すると、ポートスキャンを防ぐことができます。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.オリジナル
sudochmod aw /etc/ssh/sshd_config.original

設定ファイルを編集します。

/etc/ssh/sshd_config を編集する

#Port 22 を見つけてコメントを解除し、5桁のポート番号に変更します: Port 22333

#PermitRootLogin yes を見つけてコメントを解除し、次のように変更します: PermitRootLogin no

設定が完了したら、再起動します。

sudo /etc/init.d/sshを再起動します

4. SSHサービスコマンド

サービスを停止します: sudo /etc/init.d/ssh stop

サービスを開始します: sudo /etc/init.d/ssh start

サービスを再起動します: sudo /etc/init.d/sshresart

切断: 終了

ログイン: [email protected]

root は 192.168.0.100 マシン上のユーザーであり、パスワードを入力する必要があります。

5. SSHログインコマンド

一般的な形式: ssh [-llogin_name] [-p port] [user@]hostname

詳細を表示するには、ssh -h を使用できます。

ユーザーを指定しない場合: ssh 192.168.0.1

指定されたユーザー:

ssh -l ルート 192.168.0.1
SSH ルート@192.168.0.1 

SSH ログイン ポートを変更した場合:

ssh -p 22333 192.168.0.111
ssh -l ルート -p 22333 216.230.230.105
ssh -p 22333 ルート@216.230.230.105

6. ログイン速度の向上

リモートでログインする場合、ユーザー名を入力した後、パスワードの入力を求められるまで長い時間待たなければならないことがあります。実際、これは sshd がクライアントの DNS 情報を逆クエリする必要があるためです。この機能を無効にすると、ログイン速度が大幅に向上します。まず、sshd_config ファイルを開きます。

sudo ナノ /etc/ssh/sshd_config

GSSAPI オプション セクションを見つけて、次の 2 行をコメント アウトします。

#GSSAPIAuthentication yes #GSSAPIDelegateCredentials no 次に、ssh サービスを再起動します。

sudo /etc/init.d/sshを再起動します

もう一度ログインしてみてください。非常に高速になるはずです。

7. PuTTyを使用して証明書認証でサーバーにログインする

SSH サービスでは、すべてのコンテンツが暗号化された形式で送信され、セキュリティは基本的に保証されます。ただし、証明書認証が利用できる場合は、セキュリティがさらに向上し、一定の設定を行うことで、証明書認証による自動ログインの効果も得られます。

まず、sshd_config ファイルを変更し、証明書認証オプションを有効にします。

RSAAuthentication yes PubkeyAuthentication yesAuthorizedKeysFile %h/.ssh/authorized_keys変更が完了したら、ssh サービスを再起動します。

次に、SSH ユーザーの秘密鍵と公開鍵を作成する必要があります。まず、キーを作成する必要があるアカウントにログインします。必要に応じて、必ず root ユーザーを終了し、su コマンドを使用して別のユーザーに切り替えてください。次に以下を実行します:

sshキー生成

ここでは、生成されたキーをデフォルトのディレクトリに保存するだけです。作成の過程でパスフレーズの入力が求められますが、これは証明書にパスワードを追加することと同等です。これはセキュリティを向上させるための措置でもあり、証明書が誤って誰かにコピーされても心配する必要はありません。もちろん、これを空白のままにしておくと、後で PuTTy は証明書認証を介して自動的にログインできます。

ssh-keygen コマンドは 2 つのキーを生成します。まず、公開キーの名前を変更してサーバー上に残しておく必要があります。

cd ~/.ssh mv id_rsa.pub authorized_keys

次に、サーバーから秘密鍵 id_rsa をコピーし、サーバー上の id_rsa ファイルを削除します。

サーバー側の設定は完了です。クライアント コンピューターで次の手順を実行する必要があります。まず、id_rsa ファイルを PuTTy でサポートされている形式に変換する必要があります。ここでは、PuTTyGEN ツールを使用する必要があります。

PuTTyGen インターフェースの [ロード] ボタンをクリックし、id_rsa ファイルを選択して、パスフレーズ (ある場合) を入力し、[秘密鍵を保存] ボタンをクリックします。これで、PuTTy が受け入れる秘密鍵の準備が整いました。

PuTTy を開き、セッションにサーバーの IP アドレスを入力し、接続 -> SSH -> 認証の下の参照ボタンをクリックして、生成した秘密キーを選択します。次に、「接続」オプションに戻り、「自動ログイン ユーザー名」に証明書が属するユーザー名を入力します。 「セッション」タブに戻り、名前を入力して「保存」をクリックし、セッションを保存します。下部の「開く」をクリックすると、証明書認証を通じてサーバーにログインできるようになります。パスフレーズがある場合は、ログインプロセス中にパスフレーズの入力を求められます。そうでない場合は、サーバーに直接ログインするため、非常に便利です。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • bash スクリプトで ssh/scp コマンドにパスワードを渡す方法の詳細な説明
  • Linux で SSH 経由でリモート ファイルシステムをマウントする方法の詳細な説明
  • CentOS のデフォルトの SSH ポート番号を変更する方法の例
  • Jenkins の Publish Over SSH プラグインを使用してプロジェクトをリモート マシンにデプロイする手順
  • CentOS 6.5 の設定 ssh キーフリーログインで pssh コマンドを実行する方法の説明
  • Ubuntuの基本設定: openssh-serverのインストールと使用
  • CentOS VPS に SSH 経由で MySQL をインストールする方法
  • Linux オペレーティング システムで ssh/sftp を構成して権限を設定する方法
  • Linux での SSH 非秘密通信の実装
  • さまざまなターミナルで Mac が SSH 経由でリモート サーバーに接続する方法の説明

<<:  Linuxはバイナリモードを使用してmysqlをインストールします

>>:  JavaScript カラービューア

推薦する

Tencent Cloud Server Tomcat ポートにアクセスできない場合の解決策

最近、Tencent Cloudを使用してサーバーを設定しました。使用中に、tomcatポートにアク...

Vue 円形パーセンテージ プログレスバー コンポーネントの機能の実装

必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせ...

Nginx設定の原理と実装プロセスの詳細な説明https

Linuxユーティリティcertbotを使用してhttps証明書を生成するこのツールは Let&#...

QT が MYSQL データベースに接続するための詳細な手順

最初のステップは、対応するデータベースモジュール(sql)をプロジェクトファイル( .pro )に追...

IISとAPACHEはHTTPSへのHTTPリダイレクトを実装しています

7 のMicrosoft の公式 Web サイトから HTTP Rewrite モジュールをダウンロ...

Vue el-date-picker 動的制限時間範囲ケースの詳細な説明

2つの状況がある1. 開始時間と終了時間が同じボックス内にあります(今月のみ限定) 2. 開始時間と...

表のセルの内容が超過した場合に省略記号効果を表示する(実装コード)

例示するフロントエンド開発では、セルの幅を制限し、コンテンツが制限を超える部分に省略記号を表示する必...

MySQLはinet_atonとinet_ntoaを使用してIPアドレスデータを処理します。

この記事では、適切な形式を使用して IP アドレス データをデータベースに保存し、IP アドレスを簡...

Centos7にTenda U12ワイヤレスネットワークカードドライバーをインストールする際の問題を解決する

解決プロセス:方法1: CentOS7.3 のデフォルトのカーネル バージョンは低く、3.10.0-...

JavaScript+html はフロントエンドページでランダム QR コード検証を実装します

クールなフロントエンドページのランダムQRコード検証を参考までに共有します。具体的な内容は次のとおり...

nginx クッキーの有効期間に関する議論の要約

訪問するたびにブラウザにCookieが生成されますが、 Cookieの存在はユーザーにとって良いこと...

UI を通じて Docker を管理する方法

Docker はますます多くのシナリオで使用されています。コマンドラインツールに慣れていない人にとっ...

HTML で Flash を読み込む方法 (2 つの実装方法)

最初の方法: CSSコード:コードをコピーコードは次のとおりです。 .b970-a{幅:970px;...

MIME タイプの完全なリスト

MIME タイプとは何ですか? 1. まず、ブラウザがコンテンツを処理する方法を理解する必要がありま...

Dockerfile echoは、指定されたファイル内の複数行のテキストを実装する方法を指定します。

Dockerfile内の指定されたファイルに複数の行を追加します。echoの後の「$」記号に注意し...