今回WindowsPCから、別のWindowsPCにSSHすることにいたしました。どちらもWindows版のOpenSSH利用です。手元のPCからちょっと離れたところにあるPCのコマンドプロンプトを開いて操作できるとよろしかろう、と。ついでにその中からWSL2起動すれば x86版のLinuxも使える、と。つい魔が刺しました。
※「トホホな疑問」投稿順Indexはこちら
結論から言うと、トホホだったのは、いろいろ設定を試行錯誤していたときに、ハードの不調が相まって「接続上手くいかない」事象が頻発、何がホントに悪いのか分からなくなっていたためでした。結構時間使ってしまいました。結局PC弐号機のEthernet I/Fのところの不調。切り替えたら安定動作、するすると行きましたです。マイコンの電子工作ならハードを先に疑うけれど、PCはね、結構ハード信じているんだ。それに有線だし。
ま、さて、折角接続できたので、設定手順を書き残しておくことにいたしました。結構面倒なうえに、落とし穴もありなので、記録なしにはまたハマりそうです。
Windows 10 PC のOpenSSH
すみません、使用したのは2台ともWindows 10 <HOME> PCです。今回 Windows版 OpenSSHでリモート接続できるようにしましたが、元から Chrome リモートデスクトップでリモートで操作できるようにしてありました。Chrome リモートデスクトップについてはこちら。リモートデスクトップ使えるならそれでいいじゃん、という感じもあります。ま、いろいろやってみるじゃん、と。
さてマイクロソフト様のOpenSSHのインストールのについての説明は以下です。
やたら詳しく解説されていますが、勝手にかいつまめば以下のようです。
-
- Windows版のOpenSSHクライアント、サーバーともアプリと機能のオプション機能から選択してインストールできる
- インストールしたSSH関係のコマンドは以下のフォルダに入る。
C:\Windows\System32\OpenSSH
サーバ機側については、以下も必要です。なおサーバーの設定ファイルも上記のフォルダに格納されています。
-
- sshd_config_default ファイルは存在するが実際に設定する sshd_config ファイルは不在。
- 公開鍵での認証に必要な以下のオプションがコメントアウトされているので、sshd_config_default ファイルの該当行のコメント文字を削除して sshd_config ファイルとしてセーブした後、「コンピュータの管理」からOpenSSHサーバの有効化と再起動が必要。
PubkeyAuthentication yes
秘密鍵、公開鍵の設定と配置
続いて鍵の生成と配置ですが、これまた勝手にかいつまめば以下のようです。
Windows版のOpenSSHにも、キーの生成に使う ssh-keygen.exe は含まれている(さっきのフォルダに入っているので、パスが通っていれば使える。)
-
- クライアント側で ssh-keygen.exeをデフォルト設定で動かせば、RSAの秘密鍵 id_rsaと公開鍵 id_rsa.pubが以下のフォルダにできる。
C:\Users\ユーザ名\.ssh
-
- クライアントの公開鍵をサーバー機側の以下のフォルダに移して、authorized_keysファイルに加える(テキストファイルなのでappendする。authorized_,keysが不在なら、id_rsa.pubファイルをリネームすればよい。)
C:\Users\SSHサーバーをセットアップした(管理者権限あり)ユーザ名\.ssh
authorized_keysファイルの書き換え後、サーバーはリスタートさせました。
SSHでログインする場合のサーバー側のユーザ
クライアント側から接続するサーバ側のユーザは、SSHサーバをセットアップしたユーザでなくても良いようです。今回、サーバ上にアカウントを新たに生成してみました。ここでTIPSが(本当か、まあやってみたところ以下だった、と)
-
- sshで接続するユーザ名は Windowsのwhoami コマンドで見えるお名前
- ログインに使うパスワードは「ローカルアカウント」のパスワード
どうもマイクロソフト・アカウントでのログインみたいなものはサポートしておらず、また、通常のWindowsのアカウント情報で見える立派なお名前とは違うかもしれない素気ないユーザ名でないとダメなようです。
なお、新しいユーザを作成した直後、GUIからログインしなくてもSSH接続が可能でした。しかし、GUIから1度ログインしないといろいろ設定してくれていないみたいなので、1度ログインしておいた方が安心かもしれないです。
クライアントPCからの接続
クライアントPCのコマンドプロンプトから、以下のようにSSHを走らせるとサーバに接続されます。
ssh ユーザー名@サーバのIPアドレス
初回接続時には、known_hostsに登録されていない(ファイル存在しない)ので、「本当に接続するの?」みたいな言われようですが、yes と答えて先へ進めます。するとパスワードを聞かれるのでローカル・アカウントのパスワードを入力します。
すると目出度くサーバ機側のコマンドプロンプトが返ってきます。同じウインドウなので、素っ気ないリモートですが、あちらにつながってます。
これで「あちらの」コマンドプロンプトがこちらのPCのウインドウの中に開きました。このウインドウからお好みで Powershellを起動することも WSL(インストールしてあれば)を起動することも可能であります。
エディタをどうする
コマンドラインでの操作ができるようになったのですが、Windowsの場合、CUIで使えるようなエディタが無いことに気づきました。やっぱ無いと不便だよなあ。
VSCodeのSSH接続使ってリモート接続できないかと思ったのですが、エラーで落ちました。調べてみると結構メンドイ設定しないとVSCodeダメみたいです。今回はパス。
そこでサーバー機のコマンドプロンプトで使えるように Windows版のVIMか、MSYSでも導入しようかしらと考えたのです。しかし、既にエディタがあることに気づきました。
OpenSSHの前から上記のGitはインストールしてありました。Gitのインストールディレクトリの配下の /usr/binなどには、msys起源と思われるUnix/Linux系のコマンド群が一式入っており、そこを調べると以下のエディタがあります。
-
- vim
- nano
試してみたら問題なくリモートアクセスのCUIウインドウの中で動作しました。パスさえ向けておけばOKっと。