##はじめに
今までAWSのサーバーにSSH接続していましたが、ローカル開発環境でCentOSを動かしたところ、鍵の作成だったり色々必要なのでメモしました。
##環境
サーバー側 CentOS8.2
クライアント側 Windows10
(SSHクライアントソフト VSCode)
##前提
・VSCodeにRemote-SSHがインストールされていること
参考:VSCode の Remote - SSH 機能を使って EC2 上で開発する
・サーバーにtarがインストールされていること
※SSH接続の際に、アーカイブを展開する必要があるようです。インストールはyum install -y tarでできます。
・SSHサーバーのルートログインが許可されていること
※推奨されませんが、今回はテストのためrootでログインしています。
##大きな流れ
①サーバー側で秘密鍵・公開鍵を作成
②秘密鍵をクライアント側にアップロード
③VSCodeでサーバーにSSH接続
##①サーバー側で秘密鍵・公開鍵を作成
秘密鍵・公開鍵の作成は仕組み的にはサーバー側、クライアント側「どちらで実行しても良い」そうですが、クライアント側で作成した公開鍵をサーバー側に転送するほうが一般的のようです。今回は、Linuxでの鍵作成をしたかったのでサーバー側(CentOS)で作成します。
# ssh-keygen -t RSA -b 4096
Generating public/private RSA key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
ssh-keygen
は秘密鍵と公開鍵を作成するコマンドです。
書式 ssh-keygen -t 暗号方式 -b ビット数
オプション -t
暗号方式を指定
-b
ビット数を指定
-fオプションで作成場所を指定していない場合、/root/.ssh/id_rsaに保存してよいか聞かれるのでENTERを押します。
秘密鍵に設定するパスフレーズの入力を求められます、なしでいいのでそのままEnterを押します。
# ssh-keygen -t RSA -b 4096
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7YG9R04q702Nje8GSOEH7kdrgrsgrsgLYbTqNTbWvU root@localhost.localdomain
The key's randomart image is:
+---[RSA 4096]----+
| |
| .+ .. . o |
| .+.=..+ o o |
|.. o++. o++ . |
|. ooo. SE+oo |
| o .+o .oB.= |
| +o. . + *.o |
| .o o + .. |
| .. . .o .oo |
+----[SHA256]-----+
# ls -al ~/.ssh/
-rw-------. 1 root root 3389 11月 3 01:08 id_rsa
-rw-r--r--. 1 root root 752 11月 3 01:08 id_rsa.pub
※.pubと末尾に記載されている方が公開鍵です。(publicの略)
公開鍵のファイル名をauthorized_keysに修正します。
# mv id_rsa.pub authorized_keys
これで公開鍵と秘密鍵の生成は完了です。
次に秘密鍵をクライアント側に移動させます。
##②秘密鍵をクライアント側にアップロード
scpコマンドを使ってもよいのですが、今回はTeratermの機能を利用してクライアント側に移動させました。
File→SSH_SCP
Fromに/root/.ssh/id_rsa
Toに任意のWindowsフォルダ
参考:Teratermでコマンドを使わず簡単にファイル転送する方法
##④VSCodeでサーバーにSSH接続
VSCodeの左ペインにモニターのようなアイコンがあるのでクリック
リモートエクスプローラーが開くのでSSH TARGETSの右側の+を押下
コマンド入力画面が開くので、以下を入力
ssh -l root -i "Windowsフォルダ内の秘密鍵のパス" SSHサーバーのホスト名もしくはIPアドレス
Enterを押すと接続完了です。
SSH
はsshプロトコルを用いて別ホストに接続するコマンドです。
書式 ssh オプション ホスト名
オプション -l
ユーザーを指定
-i
秘密鍵を指定