Windows 11のOpenSSH SSH ServerでMSYS2を起動する
環境
- Windows 11 & Windows Terminal
- MSYS2 msys2-base-x86_64-20230127
OpenSSH SSH Serverインストール
以下のメニューから"機能を追加する" ボタンを押す。
設定 -> アプリ -> オプション機能 -> オプション機能を追加する
以下の2つの機能を追加する。OpenSSH クライアントは、接続テストに利用する。
- OpenSSH サーバー
- OpenSSH クライアント
OpenSSH SSH Server起動
機能を追加しても自動では起動しないので、メニューから起動する。
コントロールパネル -> Windowsツール -> サービス
OpenSSH SSH Serverのプロパティを開き、以下を設定する。
- スタートアップの種類:自動に変更する
- サービスの状態:開始ボタンを押す
OpenSSH SSH Clientによる接続確認
Microsoftアカウントでログインした状態で接続する。
パスワードはPINではなくMicrosoftアカウントのパスワードを入力する。
C:\Users\xxxxx>ssh localhost
The authenticity of host 'localhost (::1)' can't be established.
ED25519 key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
xxxxx@localhost's password:
Microsoft Windows [Version 10.0.22621.1265]
(c) Microsoft Corporation. All rights reserved.
xxxxx@VOSTRO C:\Users\xxxxx>
SSHで接続している状態ではプロンプトに接続先のPC名が表示されるようになる。
公開鍵認証
一度exitコマンドでsshを切断し、ホストに戻ってから作業する。
C:\Users\xxxxx>ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\xxxxx/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\xxxxx/.ssh/id_ed25519
Your public key has been saved in C:\Users\xxxxx/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:9nTPpYudvaaTzLBcNxAwU0fpYT0dlFrblOm2iirM1j8 xxxxx@VOSTRO
The key's randomart image is:
+--[ED25519 256]--+
| +o.o=O|
| o..X+|
| B.=|
| o =.|
| S . . o o|
| . o o + * |
| o . o B B .|
| = . E O = |
| . ..o.o.B.o|
+----[SHA256]-----+
C:\Users\xxxxx>
typeコマンドで公開鍵の中身を表示し、クリップボードにコピーしておく。(反転させてEnterを押す)
C:\Users\xxxxx>type .ssh\id_ed25519.pub
ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX xxxxx@VOSTRO
authorized_keys編集
公開鍵の内容をauthorized_keysに張り付ける。
ここで、非管理者ユーザーの場合は C:\Users\xxxxx\authorized_keys
に張り付ける。
管理者ユーザーの場合は C:\ProgramData\ssh\administrators_authorized_keys
に張り付ける。
管理者ユーザーの場合でも任意のテキストエディタで administrators_authorized_keys
に張り付けて保存しようとすると、アクセス権が無くて保存できない場合がある。その場合はNotepadを管理者権限で起動して編集するとよい。
authorized_keysを編集後、再度SSHで接続し、パスワードを省略して接続できるか確認する。
C:\Users\xxxxx>ssh localhost
Microsoft Windows [Version 10.0.22621.1265]
(c) Microsoft Corporation. All rights reserved.
xxxxx@VOSTRO C:\Users\xxxxx>
ローカルホストからの接続を確認後、他のホストから接続できるか確認する。
MSYS2インストール
ダウンロード
以下のMSYS2のサイトからアーカイブをダウンロードする。
https://github.com/msys2/msys2-installer/releases
今回は msys2-base-x86_64-20230127.tar.xz
を利用する。
展開
tarおよびxzは以下のtexinstwinに含まれる実行ファイルを利用すると良い。
http://ftp.jaist.ac.jp/pub/CTAN/systems/win32/w32tex/texinstwin.zip
> tar xJvf msys2-base-x86_64-20230127.tar.xz
展開後、msys64
フォルダが作成されるので、C:\msys64
に配置する。
/etc/fstab修正
複数のバージョンのMSYS2をインストールしてもhomeを共有できるように、C:\msys2\etc\fstabに以下を追記する。
C:/home /home ntfs binary,auto 0 0
C:/opt /opt ntfs binary,auto 0 0
初回起動
C:\msys64\msys2_shell.cmd
をダブルクリックする。
Copying skeleton files.
These files are for the users to personalise their msys2 experience.
They will never be overwritten nor automatically updated.
'./.bashrc' -> '/home/xxxxx/.bashrc'
'./.bash_logout' -> '/home/xxxxx/.bash_logout'
'./.bash_profile' -> '/home/xxxxx/.bash_profile'
'./.inputrc' -> '/home/xxxxx/.inputrc'
'./.profile' -> '/home/xxxxx/.profile'
'C:\WINDOWS\system32\drivers\etc\hosts' -> '/etc/hosts'
'C:\WINDOWS\system32\drivers\etc\protocol' -> '/etc/protocols'
'C:\WINDOWS\system32\drivers\etc\services' -> '/etc/services'
'C:\WINDOWS\system32\drivers\etc\networks' -> '/etc/networks'
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
gpg: migration succeeded
==> Generating pacman master key. This may take some time.
gpg: Generating pacman keyring master key...
gpg: directory '/etc/pacman.d/gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/etc/pacman.d/gnupg/openpgp-revocs.d/312C95AE6ABE15852630D5827A50DBC420E74D12.rev'
gpg: Done
==> Updating trust database...
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
==> Appending keys from msys2.gpg...
==> Locally signing trusted keys in keyring...
中略
###################################################################
# #
# #
# C A U T I O N #
# #
# This is first start of MSYS2. #
# You MUST restart shell to apply necessary actions. #
# #
# #
###################################################################
xxxxx@VOSTRO MSYS ~
$
exitで終了し、再度 C:\msys64\msys2_shell.cmd
をダブルクリックする。
パッケージインストール
アップデートするパッケージが無くなるまで pacman -Syu
を繰り返す。
$ pacman -Syu
アップデート後、適宜パッケージをインストールする。
$ pacman -S --needed vim
ユーザー名変更
Microsoft Accountでログインしていると、ユーザー名が自動的に設定されて変更できない。
mkpasswdコマンドを利用して /etc/passwd
を作成し、任意のユーザー名に変更する。
1列目のユーザー名と最後から2列目のhomeを変更すると良い。
$ mkpasswd -c > /etc/passwd
$ vim /etc/passwd
/etc/passwd
を変更後、ターミナルを再起動する。
デフォルトシェルの変更
サーバ側でPowerShellを管理者権限で起動し、以下の記事を参考にしてデフォルトシェルを C:\msys64\usr\bin\bash.exe
に変更する。
PS C:\WINDOWS\system32> New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\msys64\usr\bin\bash.exe" -PropertyType String -Force
DefaultShell : C:\msys64\usr\bin\bash.exe
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE
PSChildName : OpenSSH
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
PS C:\WINDOWS\system32>
SSHでサーバに接続し、bashが起動することを確認する。
デフォルトシェルを cmd.exe
に戻すときは以下のコマンドを管理者権限のPowershellで実行する。
Set-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\cmd.exe" -Force
再度 bash に変更するときは PropertyType オプションは不要となる。
Set-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\msys64\usr\bin\bash.exe" -Force
HOME変更
sshで接続するとmsys2のbashが起動するが、homeが C:\Users\xxxxx
になっている。(WindowsのSSHDに接続しているためと思われる)
C:\Users\xxxxx\.bashrc
に以下を追記し、HOMEを変更してシェルを再起動させる。
export HOME=/home/$USER
exec $SHELL -l
以降は C:\Users\xxxxx\.bashrc
ではなく、/home/xxxxx/.bashrc
を修正する。
tmux
tmuxをインストールする。
$ pacman -S --needed tmux
tmuxを起動すると、open terminal failed: not a terminal
というエラーが発生する。
# tmux
open terminal failed: not a terminal
調査の結果、以下のコメントにある以下のコードを .bashrc
に追加するとtmuxを起動できるようになった。
tmux () {
TMUX="command tmux ${@}"
SHELL=/usr/bin/bash script -qO /dev/null -c "eval $TMUX";
}