2021年5月5日

【Linux】Linux Mint にWindows10のPowerShellでSSH接続する方法



ゴールデンウィークいかがお過ごしでしょうか。
私は特にどこにも行かず自宅に引きこもっています!笑
まあでも、ずっと家にいるのもストレスですね。早く以前のように自由に出歩けるようになってほしいです。

そんななか、自宅でLinuxを使ってサーバーの構築なんかをやってるんですけど、いろいろ調べてるなかでPowerShellをSSHクライアントとして使えることを初めて知りました。
試しにやってみましたので構築手順を備忘録として公開します。

最初にネットワーク構成です。

Linux Mintは余ってるPCにインストールしました。
バージョンは20.1です。
ホスト名はMOUSEMINT。

Windows10は、Pro バージョン20H2です。
ホスト名はMOUSEDAIV4N。

まずLinux側で作業します。


最初にLinuxのアップデートを行います。
$ sudo apt update

次にOpenSSH Serverをインストールします。
$ sudo apt install openssh-server

一応sshdが起動していることを確認します。
$ ps ax | grep sshd
 115240 ?        Ss     0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
 116367 pts/1    S+     0:00 grep --color=auto sshd
大丈夫そうですね。

次にWindows側で作業していきます。


PowerShellを起動したらSSHでログイン出来るか試してみます。
PS C:\Users\hosopro> ssh hosopro@192.168.1.20
The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.
ECDSA key fingerprint is SHA256:C3Q0M5pSMhjpwkH6+C3UdvEeR5r3gkIrDSVPuRCddiI.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.20' (ECDSA) to the list of known hosts.
hosopro@192.168.1.20's password:
最初に「Are you sure you want to continue connecting (yes/no)?」と聞いてきますので「yes」と入力してEnter。
続いてパスワードを聞いてくるのでLinuxユーザーのパスワードを入力します。

ログイン出来たら一旦ログアウトします。
hosopro@MOUSEMINT:~$ logout
Connection to 192.168.1.20 closed.

再度SSHでアクセス。
PS C:\Users\hosopro> ssh hosopro@192.168.1.20
hosopro@192.168.1.20's password:
Last login: Sun May  2 18:15:50 2021 from 192.168.1.10
2回目からはパスワードだけでログインできます。

ここでホームディレクトリにworkフォルダを作成しておきます。
hosopro@MOUSEMINT:~$ mkdir work
このフォルダはあとで公開鍵を転送するときに使います。
フォルダの作成が出来たら一旦ログアウトします。

ログアウト出来たらホームディレクトリを確認してみます。
「.ssh」フォルダが出来ているのが確認できます。


次に秘密鍵と公開鍵の生成を行います。
PS C:\Users\hosopro> cd .ssh
PS C:\Users\hosopro\.ssh> ssh-keygen

ssh-keygenを実行すると、初めに「Enter file in which to save the key (C:\Users\hosopro/.ssh/id_rsa):」と表示されるのでEnterを押します。

次にパスフレーズをを聞いてきますので入力します。
このパスフレーズは公開鍵認証でSSH接続するときに使います。

パスフレーズは無しでもいいらしいのですが、安全上やはりあったほうがいいので設定します。 ちなみに10文字以上が推奨されています。

また通常のパスワードと違ってスペースも含めることができますので、自分が好きな歌詞の一節をフレーズとして使うなんてもいいんじゃないでしょうか。


.sshフォルダを見るとこのようにファイルが作成されているのが確認できます。


次に作成した公開鍵をLinux側に転送します。
保存先は先ほど作成した「work」フォルダです。
PS C:\Users\hosopro\.ssh> scp .\id_rsa.pub hosopro@192.168.1.20:/home/hosopro/work
hosopro@192.168.1.20's password:
id_rsa.pub                                                     100%  402    97.0KB/s   00:00

転送出来たらSSHでLinuxに接続します。
PS C:\Users\hosopro\.ssh> ssh hosopro@192.168.1.20
hosopro@192.168.1.20's password:
Last login: Sun May  2 18:39:36 2021 from 192.168.1.10

ログイン出来たらホームディレクトリに「.ssh」フォルダを作成します。
hosopro@MOUSEMINT:~$ mkdir .ssh

次にパーミッションを変更します。
hosopro@MOUSEMINT:~$ chmod 700 .ssh



次にworkフォルダに転送された公開鍵ファイルを.sshフォルダに移動します。
hosopro@MOUSEMINT:~$ mv ./work/id_rsa.pub ./.ssh/
hosopro@MOUSEMINT:~$ cd .ssh
hosopro@MOUSEMINT:~/.ssh$ ls -la
合計 12
drwx------  2 hosopro hosopro 4096  5月  2 18:56 .
drwxr-xr-x 23 hosopro hosopro 4096  5月  2 18:51 ..
-rw-rw-r--  1 hosopro hosopro  402  5月  2 18:45 id_rsa.pub

次に移動した公開鍵ファイルのファイル名を変更します。
hosopro@MOUSEMINT:~/.ssh$ mv id_rsa.pub authorized_keys
hosopro@MOUSEMINT:~/.ssh$ ls -la
合計 12
drwx------  2 hosopro hosopro 4096  5月  2 18:58 .
drwxr-xr-x 23 hosopro hosopro 4096  5月  2 18:51 ..
-rw-rw-r--  1 hosopro hosopro  402  5月  2 18:45 authorized_keys

次にauthorized_keysファイルのパーミッションを600に変更します。
hosopro@MOUSEMINT:~/.ssh$ chmod 600 authorized_keys
hosopro@MOUSEMINT:~/.ssh$ ls -la
合計 12
drwx------  2 hosopro hosopro 4096  5月  2 18:58 .
drwxr-xr-x 23 hosopro hosopro 4096  5月  2 18:51 ..
-rw-------  1 hosopro hosopro  402  5月  2 18:45 authorized_keys

ここまで出来たら一旦ログアウトします。
hosopro@MOUSEMINT:~/.ssh$ logout
Connection to 192.168.1.20 closed.


再度SSH接続してみます。
PS C:\Users\hosopro\.ssh> ssh hosopro@192.168.1.20
Enter passphrase for key 'C:\Users\hosopro/.ssh/id_rsa':←秘密鍵のパスフレーズを入力
Last login: Sun May  2 18:47:14 2021 from 192.168.1.10
今度はパスワードでなくパスフレーズを聞いてきました。
うまくいってるようです。
鍵を生成するときに設定したパスフレーズを入力してログインします。
これで公開鍵認証でSSH接続できるようになりました。


公開鍵認証での接続が可能になったので、これまで使用してたパスワード認証は禁止にしたいと思います。

/etc/ssh/sshd_configをviなどで開きます。
PasswordAuthenticationを探し、設定がデフォルトで「yes」になっているのでコメントを外して「no」に書き換えます。
#PasswordAuthentication yes

PasswordAuthentication no

書き換えたら保存し、sshdを再起動します。
$ sudo /etc/init.d/ssh restart

これで鍵を持ってないと弾かれるようになります。
PS C:\> ssh hosopro@mousemint
hosopro@mousemint: Permission denied (publickey).


WindowsからSSH接続するとなると昔はTeraTermやPuTTYを使うのが定番でしたが、デフォルトでPowerShellから接続が出来るのはありがたいですね。これから使っていきたいと思います。