要約: SSH (Secure Shell Protocol、SSH と呼ばれる) は、ネットワーク内のクライアントとサーバー間の接続を実現するために使用される、暗号化されたネットワーク伝送プロトコルです。通常、ローカル コンピューター上の SSH を介してリモート サーバーに接続します。 。
この記事は、Huawei Cloud Community「ssh リモート接続方法の概要」、著者: Embedded Vision から共有されたものです。
SSH (Secure Shell Protocol、SSH と呼ばれる) は、ネットワーク内のクライアントとサーバー間の接続を実現するために使用される、暗号化されたネットワーク伝送プロトコルです。通常、ローカル コンピューター上の SSH を介してリモート サーバーに接続します。 Windows、macOS、Linux にはそれぞれ独自の SSH クライアントがありますが、Windows での SSH クライアントの使用エクスペリエンスはあまり良くないため、通常は代わりに Xshell を使用します。
1. 準備
1.1、SSHクライアントをインストールする
SSH リモート接続を確立するには、クライアントと対応するサーバー コンポーネントの 2 つのコンポーネントが必要です。SSH クライアントは、ローカル コンピュータにインストールするソフトウェアです。サーバーには、継続的にリッスンする SSH デーモンと呼ばれるコンポーネントも必要です。特定の TCP/IP ポート上で、クライアント接続要求が発生する可能性があります。クライアントが接続を開始すると、SSH デーモンはサポートするソフトウェアとプロトコルのバージョンを応答し、両者は識別データを交換します。指定された認証情報が正しい場合、SSH は適切な環境に新しいセッションを作成します。
MacOS システムには、直接使用できる独自の SSH クライアントがあります。Windows システムには、Xshell クライアント ソフトウェアをインストールする必要があります。ほとんどの Linux ディストリビューション システムには、直接使用できる独自の SSH クライアントがあります。ssh -V コマンドを使用できます。現在のシステムに SSH クライアントがあるかどうかを確認します。
[root@VM-0-2-centos ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
1.2、SSHサーバーをインストールする
ssh プロセスが実行されているかどうかを直接確認するなど、Linux システムで ssh サーバーが利用可能かどうかを確認するためのコマンドがいくつかあります。
ps -ef | grep ssh
上記実行後の出力結果例は以下の通りで、sshdプロセスが起動していればsshサーバーが利用可能であることを意味します。
-bash-4.3$ ps -e|grep ssh
336 ? 00:00:00 sshd
358 ? 00:00:00 sshd
1202 ? 00:00:00 sshd
1978 ? 00:00:00 sshd
1980 ? 00:00:00 sshd
2710 ? 00:00:00 sshd
2744 ? 00:00:00 sshd
2829 ? 00:00:00 sshd
2831 ? 00:00:00 sshd
9864 ? 00:00:00 sshd
9893 ? 00:00:02 sshd
Ubuntu システムの場合、次のコマンドを使用して、OpenSSH サーバー ソフトウェアが利用可能かどうかを確認できます。
ssh localhost # 不同 Linux 系统输出可能不一样
2 つ目は、パスワードベースのログイン接続です。
一般的な使用方法では、次のコマンドを入力するだけでリモート サーバーに接続できます。
# ssh连接默认端口是22,如果本地机用户名和远程机用户名一致,可以省略用户名
ssh username@host
# 也可以指定连接端口
ssh -p port user@host
上記のコマンドは、リモート サーバーに接続するための一般的な SSH コマンドです。初めて接続して実行する場合は、次のプロンプトが表示されます。通常は「yes」と入力し、アカウントのパスワードを入力して正常に接続します。
The authenticity of host '81.69.58.141 (81.69.58.141)' can't be established.
ED25519 key fingerprint is SHA256:QW5nscbIadeqedp7ByOSUF+Z45rxWGYJvAs3TTmTb0M.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Last login: Tue Feb 28 15:33:06 2023 from xx.xx.xx.xx
3、公開キーのログイン接続に基づく
先ほどのコマンドはパスワード(秘密鍵)でログインするものですが、ログインするたびにパスワードを入力する必要があるので面倒なので、SSH公開鍵ログイン接続方法を選択することで、パスワードを入力する手間を省くことができます。パスワード。
公開キー ログインの原理は、まずローカル マシン上で公開キーと秘密キーのペアを生成し、次に公開キーをリモート サーバーに手動でアップロードすることです。このようにして、ログインするたびに、リモート ホストはランダムな文字列をユーザーに送信し、ユーザーはこのランダムな文字列を自分の秘密キーで暗号化し、暗号化された文字列をリモート ホストに送信し、リモート ホストに送信します。ユーザーの公開キーがこの文字列を復号化し、復号化された文字列がリモート ホストから送信されたランダムな文字列と一致する場合、ユーザーは正当であるとみなされ、ログインが許可されます。
秘密キーをリモート サーバーに渡すだけで済みます。リモート サーバーは、秘密キーが対応する公開キーであるかどうかを確認し、公開キーである場合はログインを許可するため、入力する必要はありません。パスワード。
SSH は、RSA、DSA、ECDSA、ED25519 など、認証キーのさまざまな公開キー アルゴリズムをサポートしています。その中で、RSA アルゴリズムが最も一般的に使用されています。これは、SSH プロトコルのデフォルトのアルゴリズムであるため、ここでは RSA を取り上げます。アルゴリズムを例として使用して、キーを生成し、パスワードなしのリモート接続を構成します。
ssh-keygen は、SSH の新しい認証キー ペアを作成するためのツールです。このタイプのキー ペアは自動ログイン、シングル サインオン、およびホスト認証に使用され、共通パラメータは次のように定義されます。
- -t パラメータはキーのタイプを指定します
- -b パラメータはキーの長さを指定します
公開キーに基づいてログインして接続するための具体的な手順は次のとおりです。
1.ローカル端末で ssh-keygen -t rsa -b 4096 コマンドを実行してキー ペアを生成します。実行後、キー ストレージ パスを入力するように求められます。Enter キーを押して、デフォルト パスに保存します。次に、キー パスワード を入力するように求められます。
2. ローカルの .ssh ディレクトリにある id_rsa.pub ファイルの内容を、ターゲット サーバーの ~/.ssh/authorized_keys ファイルに追加します。ターゲット サーバーに .ssh ディレクトリがない場合は、.ssh ディレクトリを作成する必要があります。最初にディレクトリを作成し、次にauthorized_keysファイルを作成してから、ファイルの内容を追加します。
具体的な操作コマンドは以下の通りです。
# 1,本地终端运行命令
cat ~/.ssh/id_rsa.pub # 查看本地公钥文件内容,并复制
# 2,远程终端运行命令,有 authorized_keys 文件则跳过
mkdir -p ~/.ssh # 创建 .ssh 目录
touch ~/.ssh/authorized_keys # 创建 authorized_keys 文件
# 3,然后将本地公钥文件内容粘贴到 `authorized_keys` 文件中,保存退出
上記の手順が面倒だと感じる場合は、次のコマンドを使用して、ワンクリックで公開キー ログイン接続の構成を完了できます。
$ ssh username@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
公開鍵ファイルの内容をリモートサーバーのauthorized_keysファイルに書き込むだけで公開鍵ログインの設定は完了し、以降のリモート接続では毎回パスワードを入力する必要はありません。
Github がコードを送信する際には、公開鍵ログイン方式でも接続されますが、GitHub のauthorized_keys ファイルにローカルの公開鍵ファイルの内容が追加されていれば、パスワードなしでコードを送信することができます。同じ。
4、VSCodeリモート接続
VSCode は、Remote-SSH プラグインを介して実現できるリモート接続もサポートしており、具体的な操作手順は次のとおりです。
1. VSCode にリモート SSH プラグインをインストールします。
2. Windows システムの ctrel + shift + p コマンドを押してコマンド パネルを開き、「Remote-SSH: Connect to Host...」と入力してから「SSH 構成」を選択するか、左側の「リモート エクスプローラー」→「SSH ターゲット」→「SSH 構成」を選択します。メニューバー。以下に示すように:
3. 次に、~/.ssh/config 設定ファイルが開き、次の設定テンプレートを参照できます。
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host JumpMachine
HostName jump-vscode.sensetime.com
# 你跳板机的用户名
User username
Host T4
# 目标机的ip地址
HostName xxx.xxx.xxx.xxx
# 你目标机的用户名
User username
# 目标机登录端口
Port 22
# macos系统: ProxyCommand ssh -q -W %h:%p JumpMachine
ProxyCommand ssh -q -W %h:%p JumpMachine
4. ローカル マシン上で公開キーを生成し、それをリモート サーバー上のauthorized_keys に追加する手順については、第 3 章を参照してください。
5. 構成が完了したら、保存して終了し、VSCode で、左側のメニュー バーの [リモート エクスプローラー] -> [SSH ターゲット] -> [T4] をクリックしてリモート サーバーに接続します。
参考文献
- ウィキペディア - セキュア シェル
- ssh-keygen を使用して新しい SSH キーを生成するにはどうすればよいですか?
- SSH の原理と応用 (1): リモート ログイン