Mac miniにサブのMacbook airからssh接続したい
以下の記事の通りで接続は簡単にできた。
最低限のセキュリティ対策だけしたい。
ポートの変更
sshポートの22を変更したほうがセキュリテイ的に安全らしいので変える。
この通りやったら書きこみでエラーになってるっぽかった。
コピーしたssh.plistを直接編集する。
sudo launchctl load -w /Library/LaunchDaemons/ssh.plist
これがエラーなる。
けどなんかポート変わったぽいからよしとする。
ちなみに、```/etc/services``でデフォルトのsshポートを変更するとgitとかに影響が出るようなのでやめた方がいい。
パスワード認証を無効にしたい
パスフレーズをMacのキーチェーンに登録してないのにパスフレーズの入力なしにssh接続できてしまってる。パスワード入力で接続できてしまってるようなのでパスワードによる認証を無効化したい。
/etc/ssh/sshd_config
を編集するといいらしい
#PasswordAuthentication yes これを
PasswordAuthentication no こう
でsshdを再起動
sudo launchctl stop com.openssh.sshd
macのsshdを再起動はこれでいいらしい。もしくはシステム設定のリモート共有を一回オフにしてもう一度オンでもいいらしい
だが、パスワード認証が無効にならない
公開鍵認証も有効にしてみる
PubkeyAuthentication yes
だけど無効にならない
ChallengeResponseAuthentication no
これ追加でできた
sshキーのパスフレーズをキーチェーンに保存する
この通りにやればおk
sshで接続してgit pushしたらパスフレーズを求められてpushできなかった。
これは接続先のマシンのキーチェーンにパスフレーズが保存されているため。
sshでつないでgit pushしたければローカルのsshキーを接続先でも使うsshエージェント転送を設定すれば良さそう。
/etc/ssh/sshd_configを直接編集しない方がよかったっぽい?
まあ、最低限のセキュリティ対策ということで
外出中にもsshで接続できるようにしたい
よく考えれば192.168
から始まるようなプライベートIPだと同じネットワークに接続されていないと接続できない。
同じネットワークに繋いでいない場合、
- グローバルIPに対して接続する
- ポートフォワーディング設定
といった方法があるらしいが、そういえばCloudflareでssh トンネル的なことができて便利みたいなのを聞いたことがあった気がする。
Macのsshエージェントを再起動する
sudo launchctl stop com.openssh.sshd
ストップだけど再起動するらしい
リモート接続先でgitを使うのにssh鍵が必要だが、パスフレーズを設定しているとローカルからではどうやっても知り得ないので別の鍵を使わないといけない。
ローカルで生成した鍵をGitHubに登録しておきエージェント転送でリモート接続先で使えるようにする必要がある。
ただ、ssh-agentに登録された複数の鍵を全て使ってgit操作してくれるのかが謎。
ssh-agentに登録されている鍵を全部試すということはしてくれない。
全部試してくれないというか一つ試して疎通ができればそれを使ってしまうので複数のGitHubアカウントを使っている場合、そっちのアカウントでアクセスしないでほしいみたいな状態になる。
やっぱり、GitHubアカウントを分けて運用すべきでない。
sshエージェントをssh-add -D
で一旦全て削除しておき、リモート接続先で使いたいssh鍵のみを登録しておけばうまくいった。
リモート接続先で複数のssh鍵を使いたいみたいなのはめんどくさそうなのでやらないほうが良さそう。
リモート先で使いたいssh鍵をエージェントに登録したうえでエージェント転送をしてリモート先でssh鍵を使うという使い方ならGitHubにちゃんと鍵が登録されていれば問題ないはず。
複数の鍵、GitHubアカウントを使い分けるのはめんどくさいのでやらないほうがよかったなと反省。
とりあえず、同じネットワーク内ならssh接続して開発するところはできたのであとは外出先からのグローバルなssh接続方法。
Cloudflare
Cloudflare Tunnelを使うことでリモートマシンと接続元マシンを安全かつ簡単につなぐことができる。ただCloudflareで管理されているドメインが必要。
Tailscale
ちょうどOpensshの脆弱性の話題でTailscaleやCloudflare Tunnelの話をよく見かける。Cloudflare以外にもTailscaleはよく目にしていたので調べてみたらこっちの方が簡単にssh接続できそうだったので使ってみる。
上記の記事がわかりやすかった。
めちゃ簡単にsshつながった。最初からTailscale使っとけばよかった。
つながったけどリモートマシン上でgit使う時にパスフレーズ求められてpullやpushができない。いわゆるリモート接続先での多段sshができない
sshエージェント転送をTailscaleでの接続でも使いたい。
普通にssh -A user@xxxx
みたいにして接続すればいいのか。
なんだか最初からTailscaleを使っておけば同じネットワークだろうが外出先だろうが簡単にssh接続できた気がするがsshについていろいろ勉強になったから良しとする。
外からリモートマシンの電源を入れたい
意気揚々と外出先のコワーキングスペースからTailscaleでssh接続したところ接続ができない。いろいろ調べて気づいたのだがリモートマシンがスリープ状態であれば接続できない。素人ムーヴすぎて恥ずかしい。
ということで外からリモートマシンをスリープから起こさないといけない。これにはWake-on-Lan(WoL)という技術を使ってリモートマシンにマジックパケットを送ってあげれば実現できるらしい。
それでみなさん眠っていたラズパイを踏み台として使ってたんですね、納得。
いろいろ調べた結果踏み台経由でWoLする以外にもスマホアプリからでもWoLできるらしいので試してみる。RemoteBoot WOLというやつ。
割と古くからありそうで今でも現役なのかがわからない。
WoLできないので常時起動の方向で
スマホ用のWoLアプリがあったのでインストールして使ってみたがスリープ解除できない。そもそも外部からWoLするにはルーターに穴あけもしくはVPN繋ぐ必要がある、たぶん。
TailscaleのiOSアプリがあってスマホもデバイス登録できたのでスマホからTailscale経由でWoLできるんじゃないかと思ったのだができない。あれこれ調べててもしかしたらWoLは無線経由じゃできないのかも。ちょっとWoLの仕組みまで追ってないのだけど。ネットワーク知識ないからわからん。
有線接続して試すかとも思ったのだが、外でssh繋いでいじりたいケースはそんなに多くない、というかワーケーションしたいだけなのでそのときだけスリープさせないで常時起動でいい気がしてきた。
ということで、Mac miniのスリープ設定を解除して、ディスプレイだけオフになるようにした。これで、外出先で使いたい時はそのまま放置して出かければいいんじゃないだろうか。
家にいる時は寝る前とか長期離席のときにスリープもしくはシャットダウンすればまあ今までの使い方とあんまり変わらないし。
あとは、たとえば一週間旅先で自宅Macいじるために常時起動させておくのにどのくらい電力消費するのかがまったくわからないけどそんなにかからないと信じる。
だめなら、有線接続してWoL試してみる。まあ、でも有線接続するだけならやるか、、