Contents
概要
WindowsからCentOSに公開鍵認証を用いてSSHで接続します。WindowsのSSHクライアントはPuTTYを使用します。
前提条件
OS
CentOS Stream 8を使用します。
SELinux
有効です。無効にする場合はこちらを参照して下さい。
Firewalld
無効です。有効化する場合はこちらを参照して必要な許可設定をして下さい。
標準ポート番号
TCP:22 (SSH)
設定
Windowsで秘密鍵と公開鍵を作成
Windows10のPowerShell上で作業します。ssh-keygenを用いて秘密鍵と公開鍵を作成します。パスフレーズは無しの例となりますが、要件に応じてパスフレーズを設定して下さい。
PS C:\Users\myuser> cd C:\Users\myuser\.ssh PS C:\Users\myuser\.ssh> ssh-keygen -t rsa -b 4096 -C "win.si1230.com" Generating public/private rsa key pair. Enter file in which to save the key (C:\Users\myuser/.ssh/id_rsa): Enter Enter passphrase (empty for no passphrase): Enter Enter same passphrase again: Enter Your identification has been saved in C:\Users\myuser/.ssh/id_rsa. Your public key has been saved in C:\Users\myuser/.ssh/id_rsa.pub. The key fingerprint is: SHA256:3FTd3jMHeyajjwhmKb3JpxbaRR+HfeHEoa/64Xq4cAs windows.si1230.com The key's randomart image is: +---[RSA 4096]----+ | ...o.| | . ++.| | . +o+o| | . o. o B+B| | .So.. + B+| | . B . o . | | B E o.= | | . * *.=.o | | ..o ==o | +----[SHA256]-----+
上記の作業が終わると秘密鍵と公開鍵が作成されます。公開鍵は接続対象のCentOS上に配置します。
ファイルパス | |
---|---|
秘密鍵 | C:\Users\myuser/.ssh/id_rsa |
公開鍵 | C:\Users\myuser/.ssh/id_rsa.pub |
CentOSに公開鍵を配置
rootユーザーへの接続を前提とします。公開鍵の情報は/root/.ssh/authorized_keysに書きます。下記の例ではauthorized_keysを新規に作成していますが、既に存在する場合はそれに追記すれば良いです。Windowsにはssh-copy-idコマンドが存在しないため、スマートではありませんがエディターを使用してWindowsからCentOSに貼り付けます。この作業はコンソールかパスワード認証のSSHとなります。
[root@centos ~]# mkdir /root/.ssh [root@centos ~]# vim /root/.ssh/authorized_keys C:\Users\myuser/.ssh/id_rsa.pubの内容を貼り付け [root@centos ~]# chmod 600 /root/.ssh/authorized_keys
PowerShellのSSHクライアントから接続確認
ここまでの状態でPowerShellのSSHクライアントからは公開鍵認証でSSH接続が可能となっています。PowerShellのSSHクライアントもシンプルでとてもいいのですが、個人的に唯一の欠点がLinuxに接続した際の耐えかねる文字色の見づらさです。対処方法はいくつかあるようですが、どうもしっくりこなかったため、使用を断念しています。この問題さえなければPowerShellのSSHクライアントを使用したいので今後の改善に期待しています。
PS C:\Users\myuser\.ssh> ssh -l root 192.168.13.88 The authenticity of host '192.168.13.88 (192.168.13.88)' can't be established. ECDSA key fingerprint is SHA256:DaC+Cvsw1vvIEh40b5JEkwdtGg7pqKBuy2PkD/42U4I. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.13.88' (ECDSA) to the list of known hosts. Activate the web console with: systemctl enable --now cockpit.socket Last login: Tue Apr 27 18:47:40 2021 from 192.168.13.1 Activate the web console with: systemctl enable --now cockpit.socket Last login: Tue Apr 27 18:47:40 2021 from 192.168.13.1
PuTTYからSSH接続
まず、PowerShellのSSHクライアントの秘密鍵をそのまま使用できないため変換が必要です(PowerShellのSSHクライアントの秘密鍵:pem形式、PuTTYの秘密鍵:ppk形式)。下記の通り、PuTTYに付属するPuTTYgenでppk形式に変換可能です。尚、WinSCPではpem形式の秘密鍵を指定すると自動的にppk形式に変換してくれました。
- PuTTYgenを起動します。
- LoadでC:\Users\myuser/.ssh/id_rsa(pem形式の秘密鍵)を選択します。
- Save private keyでファイル名をid_rsa.ppk(任意)として保存します。パスフレーズは要件に応じて設定して下さい。
最後に、PuTTYで下記のPrivate key file for authenticationにC:\Users\myuser/.ssh/id_rsa.ppkを指定すれば、PuTTYから公開鍵認証でSSH接続が可能です。
Connection > SSH > Auth > Private key file for authentication
秘密鍵の変換に関する補足
本稿では、PowerShellのSSHクライアントで秘密鍵と公開鍵のペアを作成していますが、これは個人的にVisual Studio Codeのリモート接続で必要なるためで必須ではありません。また、PowerShellのSSHクライアントの秘密鍵をPuTTYgenでppk形式に変換していますが、PuTTYgenで個別の秘密鍵と公開鍵のペアを作りPuTTY用として管理しても良いです。この場合は管理対象のファイルが増えるのが難点です。