MSYS2でsshdを動かして環境を整えたメモ

Windows機のMSYS2にOpenSSHを入れていろいろ環境を整えたのでその備忘録。

状況

パワーのあるWindows機でいろいろ(開発の)作業をしたいが、物理的に触るのはMacBookだけにしたい。

my-computers
図の、吹き出しで囲った「SSH (MSYS2)」の部分が今回セットアップした部分だ。MSYS2等は既にインストール済みの前提とする。

sshdを動かす

「MSYS2 sshd」でググったらトップに出てきた

を参考にした。というか、そのまま実行した。

ただ一点ハマったところとして、はるか昔にセットアップしたCygwinのsshdの情報が残っていたようで、それをやっつけないとダメだった。(普通の人はハマるところじゃないと思う)

注意すべき点として、MSYS2をスタートメニューの「MSYS2 Shell」や「MinGW-w64 Win** Shell」から起動した場合は MSYSTEM 環境変数や PATH 環境変数が適切に設定されるが、SSHで入った場合はそういうのが設定されないっぽいので自分で設定すること。

起動とシャットダウン

マシンの起動はWake on LANでできるので問題ない。

マシンをシャットダウンする時は、コマンドプロンプトであれば

>shutdown /s

という風にshutdownコマンドを叩けば良いのだが、MSYS2で同じコマンドを実行するとパスの変換(UNIX流→Windows流)によって

shutdown S:\

みたいなコマンドが実行されてしまう(多分)。そこで、スラッシュを2つつける

$ shutdown //s

とスラッシュがエスケープされて shutdown /s が実行される。MSYSのパスの変換規則の詳細についてはここを参照するのが良さそう。

ただ、Windowsの shutdown コマンドを実行しても、SSHのセッションは自動で切断されないようだ。

MSYS2からVirtualBoxの仮想マシンを制御

.bash_profile あたりで /c/Program Files/Oracle/VirtualBox/ に PATH を通す。あとは VBoxManage なり VBoxHeadless で適当に。

EmacsでSSH越しでファイルを編集

MSYS2のSSHでログインした状態でMSYS2のEmacsを実行しようとしても standard input is not a tty とか言われてなんかうまくいかない。

しかし、最近のEmacsではTRAMP Modeとかいうのがあって、特に設定しなくてもSSH越しにファイルを編集できるらしい。

例えば、Windowsマシンのホスト名が my-windows-machine.local だとすると、Mac上のEmacsで

C-x C-f /my-windows-machine.local:hello.txt

みたいな感じでファイルを開けばいい感じになる。

以下、追記

セッション終了時に画面をクリアしない

MSYS2のデフォルトだと、セッション終了時にコンソールがクリアされるようだ。環境によって違うかもしれないが、実際の挙動は /etc/bash.bash_logout を読めば書いてあるはず。

/etc/bash.bash_logout を読むと、 SHLVL 環境変数が 1 よりも大きければコンソールはクリアされないようだ。そこで、sshでログインする際に手元の SHLVL 環境変数を引き継いでやりたい。

SHLVL 環境変数を引き継ぐには、リモート(MSYS2)の /etc/ssh/sshd_config

AcceptEnv SHLVL

を書いてやり、手元の ~/.ssh/config

SendEnv SHLVL

と書いてやれば良さそうだ。参考:how can I pass an environment variable through an ssh command? – Super User


1 thought on “MSYS2でsshdを動かして環境を整えたメモ

  1. ピンバック: MSYS2メモ | 雑記帳

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です