GNU/Linux >> Linux の 問題 >  >> Linux

生産性を高めるために知っておくべきSSH機能トップ10

この記事は、Linuxの記事シリーズの続きであり、毎日の生産性を向上させるための多くの便利なSSH機能とコツをカバーしています。私たちのビジュアルは、SSHセットアップ、構成ファイル管理、認証、複数のSSHキーの操作、そしてもちろん、SSHローカルおよびリモートポート転送を理解するのに役立ちます。 10分でSSHマスターになりましょう!

SSHとは

Secure Shell(SSH)は、リモートサーバーに安全に接続し、コンソールインターフェイスを使用して管理できるようにするネットワークプロトコルです。

SSH接続を確立すると、サーバーがシェルセッションを開始します。その後、SSHクライアントにコマンドを入力すると、リモートサーバーで実行されます。

システム管理者は、このプロトコルを使用して、リモートLinuxサーバーを安全に接続および管理します。

SSHはどのように機能しますか

他のネットワークアプリケーションと同様に、SSHは2つのコンポーネントを使用します。

  • SSHクライアント は、ネットワークのLinuxベースのコンピューターへの接続に使用するコンピューターにインストールするアプリケーションです。 SSHクライアントは、コンピューターとリモートサーバーの間に暗号化された接続を確立します。
  • SSHサーバー は、クライアント接続をTCP/IPポート22でリッスンするサーバーアプリケーションです。クライアントが正しい資格情報を提供した場合、SSHサーバーは新しいユーザーセッションを作成し、リモートコマンドを実行できるようにします。

SSH認証

SSHを使用すると、複数の異なる認証方法を使用できます。最も広く使用されているのは次のとおりです。

  • パスワード認証 –リモートホストにアクセスするためのユーザー名とパスワードの入力を求められます。
  • SSHキーベースの認証 –ユーザー認証にSSH公開鍵と秘密鍵を使用しています。

SSHキーベースの認証

この認証方法は、パスワードを使用するよりも安全であると考えられています。仕組みは次のとおりです。

SSHキーベースの認証アルゴリズム:

  • クライアントがSSH接続を開始します。
  • サーバーはランダムなメッセージを送り返します。
  • クライアントは、受信したメッセージをプライベートSSHキーを使用して暗号化します。 サーバーに送り返します。
  • サーバーは、公開SSHキーを使用してクライアントのメッセージを復号化します 。メッセージが同じ場合、サーバーはアクセスを許可します。

SSHでのパスワード認証の使用は安全ではありません。まだパスワード認証を使用している場合は、パスワードをSSHキーベースの認証にできるだけ早く変更する必要があります。

SSHクライアントをインストールする方法

ほとんどのLinuxシステムとmacOSでは、SSHサーバーがすでにインストールされており、デフォルトで利用できます。ただし、仮想マシンでLinuxを使用している場合は、Linuxのインストールが必要になる場合があります。

Ubuntu

debベースのLinuxディストリビューションの場合、次のコマンドを使用してSSHクライアントをインストールできます。

sudo apt-get update
sudo apt-get -y install openssh-client

CentOS、Fedora、RedHat

yumベースのLinuxディストリビューションの場合、次のコマンドを使用してSSHクライアントをインストールできます。

sudo yum -y install openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
ウィンドウズ

Windowsオペレーティングシステムの場合、PuTTYは標準のデファクトSSHクライアントになりました。インストールするには、上記のリンクからMSIインストーラーをダウンロードし、WindowsにPuTTYをインストールする方法の手順に従ってください。

Chocolateyを使用した自動化された方法は次のとおりです。 PowerShellコンソールを「管理者として実行」モードで開き、次のコマンドを実行します。

Set-ExecutionPolicy RemoteSigned

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

choco install putty -y

SSHサーバーをインストールする方法

ほとんどのLinuxシステムとmacOSでは、SSHクライアントがすでにインストールされており、デフォルトで利用できます。ただし、仮想マシンでLinuxを使用している場合は、Linuxのインストールが必要になる場合があります。

SSHサーバー– Ubuntu

debベースのLinuxディストリビューションの場合、次のコマンドを使用してSSHクライアントをインストールできます。

sudo apt-get update
sudo apt-get -y install openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd

SSHサーバー– CentOS、Fedora、RedHat

yumベースのLinuxディストリビューションの場合、次のコマンドを使用してSSHクライアントをインストールできます。

sudo yum -y install openssh
sudo systemctl enable sshd
sudo systemctl start sshd

SSHサーバー– Windows

SSHサーバーをWindowsにインストールできません。 Windowsの世界では、リモートデスクトップとWinRMを使用してリモートWindowsサーバーを制御する必要があります。

SSHキーを作成

SSHクライアントを入手したらすぐに、SSHキーベースの認証に使用される秘密SSHキーと公開SSHキーを作成できます。 SSHキーを作成するには、ターミナルで次のコマンドを実行します。

ssh-keygen -t rsa -b 4096 -C "[email protected]"

このコマンドは、4KbRSAキーペアを作成します。

  • ~/.ssh/id_rsa –SSH秘密鍵。
  • ~/.ssh/id_rsa.pub –SSH公開鍵。

重要: SSH秘密鍵ファイルを他人に見せたり送信したりしないでください。

SSHキーベースの認証を設定する

サーバーでSSHキーベースの認証を設定するには、次の手順を実行する必要があります。

  • サーバーにログインします。
  • ユーザーのホームディレクトリに移動します。
  • ファイルを編集する〜/ .ssh / authorized_keys 公開鍵の内容を貼り付けます そこにファイルします。
  • 変更を保存します。

〜/ .ssh / authorized_keys 必要な数の公開鍵ファイルレコードを含めることができます。そのため、多くの異なるユーザーが同じログイン名を使用してサーバーに接続できますが、秘密鍵ファイルを使用できます。

SSHを使用して接続する方法

次のコマンドを入力して、SSHクライアントを使用してリモートLinuxサーバーに接続できます。

ssh remote_username@host_ip_address
サーバーごとに異なるSSHキーを使用する

さまざまなサーバーにアクセスするためにさまざまなプライベートSSHキーファイルを使用する必要がある場合、これは広範囲にわたる状況です。それを行う方法はいくつかあります。

接続コマンドでSSHキーを指定

SSH接続コマンドの一部として必要な秘密鍵を指定するには、-iを使用します フラグ:

ssh -i ~/.ssh/another_private_key remote_username@host_ip_address

SSHエージェントを使用する

秘密鍵が多すぎない場合は、SSHエージェントを使用できます。

SSH Agentは、プライベートSSHキーをメモリにロードし、それらを使用してSSH認証を渡すプログラムです。

Linux

バックグラウンドでssh-agentを起動します:

eval "$(ssh-agent -s)"

SSHキーをエージェントに追加するには、次のコマンドを使用します。

ssh-add -K ~/.ssh/id_rsa
ssh-add -K ~/.ssh/another_private_key

ウィンドウ

PuTTYディストリビューションには、システムトレイに配置され、同じ役割を果たすPagentが含まれています。 Pagentを右クリックして、SSHキーを追加します。

これで、SSHクライアントは、ロードされたすべての秘密鍵を1つずつ使用して、SSH接続中に認証を渡します。

SSH構成ファイル

SSHクライアントパラメータを設定するもう1つの便利な方法は、~/.ssh/configを使用することです。 ファイル。

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
Host exceptional.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/another_private_key

上記の例では、デフォルトの~/.ssh/id_rsaを使用しています。 exceptional.comを除くすべてのサーバーの秘密鍵ファイル サーバ。 exceptional.comの場合 サーバーでは、~/.ssh/another_private_keyを使用します ファイル。

SSHエージェントとキー転送

私が日常的に使用しているもう1つのお気に入りのSSH機能は、SSHキー転送です。ローカルSSHキーを使用してさまざまなサーバーに接続できます。

-Tを指定すると、SSHクライアントの実行中にSSHキー転送を有効にできます フラグ:

ssh -T remote_username@host_ip_address

または、~/.ssh/configでこの構成を永続的に有効にすることができます ForwardAgent yesを指定してファイルを作成します :

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
  ForwardAgent yes

SSHポートフォワーディング

SSHプロトコルを使用すると、SSHエージェント通信を安全なSSHチャネルだけでなくTCPトラフィックを介して転送できます。

UDPトラフィックを転送する必要がある場合は、ncを使用してください SSHと組み合わせて。

ポート転送オプションには2つのタイプがあります。

ローカルポートフォワーディング

SSHローカルポートフォワーディングを説明する最良の方法は、次の図を参照することです。

この図では、ジャンプホスト サーバーは、AmazonRDSPostgreSQLサーバーへのプライベート接続を備えています。

クライアント ノートパソコンはジャンプホストサーバーに接続できます SSHプロトコルを使用します。

クライアントの所有者 ノートパソコンは、AmazonRDSインスタンスに接続する方法を探しています 。

SSHローカルポート転送機能を使用すると、クライアントでポートをバインドできます ラップトップ。バインドされたポートからのトラフィックは、ジャンプホストを介して転送されます サーバーからAmazonRDSインスタンス

その結果、クライアントからRDSインスタンスに接続することになります ノートパソコンの場合、pgsqlを設定する必要があります ノートパソコンでlocalhost:15432に接続します 。

ジャンプホストへのSSH接続を確立する方法は次のとおりです。 LinuxまたはmacOSのクライアントから ノートパソコン:

ssh -L 127.0.0.1:15432:rds-endpoint-url:5432 ec2-user@jump_host_ip

PuTTYを使用している場合は、接続を変更する必要があります – SSH トンネル ジャンプホストに接続する前。

リモートポートフォワーディング

SSHリモートポートフォワーディングは、反対の問題を解決するもう少しエキサイティングな機能です。これにより、リモートsshサーバーのポートをバインドし、そのポートに着信するトラフィックをSSHクライアントホストの背後にあるネットワークに転送できます。

これが例です。

この例では、分離サーバーがあります 、インターネットにアクセスできない、およびクライアント ジャンプホストへの接続に使用しているノートパソコン 。

ジャンプホスト間のトラフィック および分離サーバー 制限はありません。

分離サーバーを許可する必要があります インターネットに接続します。どうすればそれができますか?

たとえば、ポート8080のクライアントラップトップでSquidプロキシを使用してDockerコンテナを起動できます。次に、ジャンプホストに接続できます。 SSHを使用します。リモートポート転送機能は、ポート8081をバインドすることです ジャンプホスト トラフィックをクライアントに転送します ノートパソコンのポート8080

その結果、分離されたサーバー http://jump_host_ip:8081を使用できるようになります プロキシサーバーとして。

LinuxまたはmacOSでSSH接続中にリモートポート転送を有効にするには:

ssh -R 8081:localhost:8080 ec2-user@jump_host_ip

PuTTYおよびWindowsホストの場合:

概要

この記事では、日常業務で使用している多くの便利なSSH機能について説明しました。あなたもそれらを使い始めてくれることを願っています。不明な点がある場合は、下のコメントセクションで私に連絡してください。喜んでお手伝いさせていただきます。

この記事がお役に立ちましたら、お気軽に世界に広めてください!


Linux
  1. [Linux]:SSHサーバーで有効にするトップ12のセキュリティ機能!

  2. 別のサーバーを使用してサーバーにSSH接続する方法は??

  3. Redhat vs Ubuntu:知っておくべき15の基本的な事実

  1. VPSホスティングとは何ですか?仮想プライベートサーバーについて知っておくべきことすべて

  2. 20OpenSSLコマンド知っておくべき例

  3. Ubuntu Server 知っておくべきこと

  1. あなたが知りたいかもしれない「トップ」コマンドラインユーティリティのいくつかの代替案

  2. SSHのトラブルシューティング

  3. ~/.ssh/config ファイルを複数持つことはできますか?