0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MSYS2 with OpenSSH SSH Server on Windows 11

Posted at

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";
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?