Windows機のMSYS2にOpenSSHを入れていろいろ環境を整えたのでその備忘録。
状況
パワーのあるWindows機でいろいろ(開発の)作業をしたいが、物理的に触るのはMacBookだけにしたい。
図の、吹き出しで囲った「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
ピンバック: MSYS2メモ | 雑記帳