この記事は、Linuxの記事シリーズの続きであり、毎日の生産性を向上させるための多くの便利なSSH機能とコツをカバーしています。私たちのビジュアルは、SSHセットアップ、構成ファイル管理、認証、複数のSSHキーの操作、そしてもちろん、SSHローカルおよびリモートポート転送を理解するのに役立ちます。 10分で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のインストールが必要になる場合があります。
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接続コマンドの一部として必要な秘密鍵を指定するには、-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機能について説明しました。あなたもそれらを使い始めてくれることを願っています。不明な点がある場合は、下のコメントセクションで私に連絡してください。喜んでお手伝いさせていただきます。
この記事がお役に立ちましたら、お気軽に世界に広めてください!