このスクラップの内容
メインで使っているのはm1のMac miniでメモリ16Gだけど個人で使うにも業務で使うにも今のところ困っていない。
だが、やはり持ち運べないのが不便になってきた。
今住んでいる家は2LDKの賃貸で一部屋を私の仕事部屋兼寝床兼物置部屋にしている。もう一つの部屋では一歳三ヶ月になった子供と妻が寝ている。
4月から保育園が始まったものの噂通りの発熱ラッシュで満足に登園なんてできず、中耳炎をこじらせ週2ペースで耳鼻科にずっと通っているのだが先日手足口病の疑いで内科にかかったら妻がコロナ陽性だった。
さすがにコロナで体調が悪い我が子と朝まで一緒はきつい。体調悪いと我が子は夜泣きが激しい
なので寝床を交換して寝るまでリビングでサブのMacBook Airを使って作業していた。
しかし、メインのMac miniで作業していた内容をGitHubにpushし忘れちゃったり、miniの方にしかないファイルがあったり、そもそもサブのMacBook Airのスペックが2013年くらいの8Gメモリのモデルで低スペックで開発がシンプルにキツイとかあってなんだかいい方法はないかなというお気持ちに
そして、そのあとちゃんと私もコロナ陽性になった。寒気やばい
sshでMac miniにつなぎたい
自宅サーバーを持っているような人たちは外出先からsshでサーバー繋いだりとか、サブ機の安いWindowsからメインのマシンにsshで繋ぐとか、会社で高スペックサーバーインスタンスを立ててそこにsshで入って開発をしたりとか、そういう話は聞いたことがあった。そこでMacBook AirからメインのMac miniにsshする方向で考えてみた。
なるほど、こういう時にsshしたくなるのか
Qiitaの記事にまんまな記事があったのでその通りにやったら簡単にsshでメインのマシンに入ることができた。
sshによるリモート接続はセキュリティ対策がどうのこうのという話もよく聞くので最低限の対策はしておくことにした。
ポートの変更
デフォルトの22のままだとよくないというのを聞いたので変更。/etc/servicesを変更する方法がけっこう出てきたけどこれを変更するとデフォルトのsshポートが変更になるのでgit操作が失敗するから戻したみたいな記事も結構でてきた。
ssh.plistを書き換える方法が出てきたので言われた通りにやったらできた。なんかエラーっぽい出力でた気がしたんだけど変わったからよしとする。
変えてからsshのポート変更はセキュリティ的にあんまり意味ないみたいなのを聞いた。ちょっとセキュリティの専門家ではないのでほんとのところどうかは知らないけど、総当たり攻撃っぽいのの対策でポート変更するんだよね?無意味ではないのかなとは思うけどまあどっちでもいい
パスワード認証の無効
鍵認証失敗しても無意識でパスワード認証してて入れちゃってたのに気づいた。これは変更しないとだめだろう
/etc/ssh/sshd_configをいろいろいじってたらできた
ssh鍵のパスフレーズについて
GitHubがssh認証のベストプラクティスっぽいのを出してくれてるっぽいのでそれに従ってssh鍵の生成をした。今までパスフレーズ未入力で鍵生成してしまっていたがちゃんとパスフレーズを設定して今回は作成した。
でMacの場合はキーチェーンにこのパスフレーズを保存して使うことができる。これはsshエージェントにキーチェーンに保存されているパスフレーズを使うようにして登録をすることでパスフレーズの入力なしにssh接続できるみたいな仕組みのよう。
エージェントはターミナル閉じると初期化されるので.zshrcなどにエージェント追加のコマンドの記載が必要。
それで常にキーチェーンに保存されているパスフレーズを使ったsshエージェントが登録され、使用できる。
ここらへんのssh鍵の生成、パスフレーズ、sshエージェント、キーチェーンの関係があんまりわかっていなかったので今回のことで勉強になった。俺たちは雰囲気でsshを使っていた
さらにssh認証したあとのリモートマシン上でgit操作をする時、リモートマシン上のssh認証鍵を使うことはできてもパスフレーズがわからない。これはリモートマシンのキーチェーン上に保存されているパスフレーズを使うように登録されているsshエージェントがないから。
これに関してはsshエージェント転送というのを使えば接続元のsshエージェントを接続先のリモートマシンでも使えるというもの。
.ssh/configに接続先情報やsshエージェント転送などの設定を記載して簡単にsshできるところまでできた。
これでリビングから作業部屋のMac miniにssh接続して作業できる!やったぜ
出先でもsshしたい
ほんと素人で恥ずかしいのだけど出先からのssh接続のことまで考えてなかった。あんまりしないけどせっかくなので気晴らしに外でもsshして作業できるようにしたい。
でも接続先として使っていたIPはプライベートIPだ。同じネットワーク内であれば繋げたが外部から接続ができない。
そこでTailscaleですよ!!
なるほど、出先で自宅のプライベートなネットワークにつなぎたいときにTailscaleを使いたくなるのか。
Tailscaleはほんと簡単に接続できた。Mac miniとMacBook AirにTailscaleをインストールしてGoogleアカウントで認証して接続したら終わった。ほんと簡単
MacBook Airのネット接続をWi-Fiじゃなくてスマホのテザリングに切り替えてsshを試したところ無事つながった
逆にTailscaleがなかったときは自宅のネットモデム?ルーターに穴あけの設定とか自前のVPNを用意しなきゃいけなかったってことだよね?
いい時代にエンジニアになってよかったよかった
ちなみに、Tailscaleの前にCloudflare Tunnelとかも試そうと思ったのだけどドメイン必要みたいだったのでやめた。
満を持して出先からssh
ということで近所のコワーキングスペースから接続してみたけど接続ができない
なんでだよ、家で試したときはできたじゃないか
いろいろ調べて思ったのだが自宅のMac miniがスリープ状態だからか?え、そういうこと?起動しっぱなしじゃないといけないの???
とりあえず、家にいたヨメにPCのスリープ解除してもらったらssh接続できたからそういうことなんだろう。なんという素人ムーヴ...
Wake On Lanによるリモートスリープ解除
で、いろいろ調べてリモートでPCの電源を入れたりスリープ解除できるWoL(Wake On Lan)という方法があることを知った。
WoLはマジックパケットと呼ばれるデータをマシンのNICに対して送ることで電源をONにすることができる技術らしい。ただし、マジックパケットを送信するのは送り先のマシンと同じネットワークから送る必要がある。
だから、ラズパイにTailscaleをインストールして出先からTailscale経由でラズパイからWoLで電源を入れている人がけっこういたのか。納得
だが、うちに使っていないラズパイなんてない。
調べてみたのだがスマホからマジックパケットを送信できるWoLアプリがいくつかあるみたいだ。さらにTailscaleのスマホ用アプリもある。
スマホからTailscaleで自宅マシンと同じVPNに接続できれば、WoLアプリでマジックパケットを自宅マシンに送れるはず?
と思い何度か試したがうまくいかない
そもそもMac miniでログアウトしたらもう一度ログインしないとTailscaleがオンラインにならないし、一定時間操作せずに画面が消えた際も繋げる時と繋げない時がある。どういう状態でつなげるのかがよくわからない
ログアウトはたぶんしてしまうとどうしようもない。たぶん。Tailscaleのエージェントがオンラインで起動にならない。外から仮にスリープ解除できてもだめな気がする
スリープはMac miniなのでディスプレイに繋いでいるので単にディスプレイが消えてるだけかもしれないし、ディスプレイのオフと共にMac mini自体もスリープしてるかもしれない?画面消えててもsshできるときはディスプレイ消えてるだけでMac mini自体は起動してるからとか?
ちょっとよくわからない
そもそもMac miniはWiFiつないで使ってるのだけどWoLが有線Lanじゃないとできないっぽい
んーーーー、なるほど
正直出先でPC使う機会はあまりないし、もし外で使いたいときはスリープしないように設定してTailscaleでつなげばいいかなという気もする
消費電力がわからないんだよなー。常時ディスプレイオフとスリープ連動の設定をオフにしてMac miniを常時起動するようにしておけばいいのだけどそのときの電気代がどのくらい変わるのかが。
出かける時だけ設定変えればいい気もするけど忘れそう
まとめ
リビングから自室のMac miniにつなぎたくてssh設定した
リビングからの接続ができたら出先からの接続もしたくなった
Tailscaleを使うことで簡単に出先からでもssh接続ができた
自宅のMac miniは起動させておかないとssh接続できない
WoLをTailscaleとWoLアプリで試したがうまくいかなかった
出先での接続はMac miniを常時起動で使うことにした
低スペックサブ機を有効活用できてめでたしめでたし
一応有線接続にしてWoLを試してみたがうまくいかなかたので諦めた(そもそもうまくいってるのかいってないのかもよくわからない)
とりあえず、ちょっとした気晴らしの出先作業やワーケーション(したことないけど)ではMac mini常時起動でTailscale経由でつなぐでとりあえずはやってみる。電気代はそんなにしょっちゅう出先で作業もしないだろうしそんなに変わらないだろう、たぶん。最悪、出先でsshできないとかなったら直接GitHubリポジトリクローンしてくれば作業はできる。
そもそもM2のMacBook Airでも買うかと思ってたのだけど最低限のスペックにしても20万弱くらいはしてしまうのでサブにそんなにお金出すのもなーというところから始まった
M2 Airを躊躇いなく買えるくらいの余裕が欲しい
安いWindows機にLinux入れて使ってサブとして使ってるみたいな人もよく聞くので最初はそれも考えたのだけどPCもLinuxも詳しくないのでちょっと何を買えばいいのかわからなかったのでやめた
思ってたより大変だったがsshやネットワーク、Tailscaleなどについてとても学びになったし一応やりたかったことはできるようになったし、よしとする。
ほんと、sshは雰囲気で使っていて、正直Gitのssh鍵もエンジニアなりたての時に適当に作ってたり、開発サーバーへの接続も常設のEC2インスタンスにつなぐみたいな機会も最近はほとんどない。
こういう、なんというか、泥臭い作業(怒られそう)は学びが多いし、普段の業務ではもはや経験できない、ような気がするのでプライベートな時間を使ってやっていきたい。
sshって便利な技術だ