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?

WindowsでZeroTierを使用したSSH接続手順

Last updated at Posted at 2024-12-09

概要

普段自宅のデスクトップPCで趣味開発をしているが、長期で実家に帰るときにクソ雑魚ノートPCでしか作業できないのはしんどいのでリモートログインできるようにしたい
リモートデスクトップは重たいので、VSCodeでSSH接続することを目指す
ネットワークなんもわからずChatGPTと一緒に悪戦苦闘したため、自分用備忘録として残す

2024/12/13追記

実家に帰り手順通りに接続を試みたところ、ZeroTierの仮想IPアドレスが変更されており接続できなかった。おそらくIPアドレスが変更されるたびにデスクトップPCでRestart-Service sshdしないといけない?ので、帰省中には対処できない。
年明けに自宅に帰ったらIPアドレスの変更に対応する方法を考えますが、誰か教えてください!

環境

デスクトップPC:Windows11
ノートPC:Windows11、VSCodeインストール済み
Wi-Fiルータ:マンションの壁に埋め込まれている。これのせいでルータのグローバルIP(なにそれ?)が取得できず、ZeroTierを使う必要があった

ZeroTierの設定

デスクトップPCとノートPCが同じネットワーク(同じ部屋で同じWi-Fiに)に接続していた場合のSSH接続は簡単にできたが、外出先でノートPCが自宅デスクトップPCと異なるネットワークに接続していた場合そうもいかないらしい。
そこでZeroTierを使うと、2つのPCが同じ仮想ネットワークに接続することで外出先でも同じネットワークに接続しているかのようにふるまえるらしい。

1. ZeroTierのアカウント作成
公式サイトから無料アカウントを作成する

2. ZeroTierをダウンロード
デスクトップPC、ノートPCの両方にZeroTierをダウンロードする

3. ネットワークを作成
デスクトップPC(どっちでもいい?)でZeroTierにログインし、Create A NetworkをクリックするとNETWORL IDなどが出てきてネットワークが作成される

image.png

4. ネットワークに参加
デスクトップPCとノートPC両方で先ほど生成されたネットワークIDを使って以下を実行する

powershell(管理者権限)
zerotier-cli join <ネットワークID>

5. デバイスの認証
Create A Networkの画面の生成されたネットワークをクリックすると以下のような管理画面が出てくる
ネットワークに参加できていればデスクトップとノートの2つがMembers欄に追加されているので、各行のEditの横にあるチェックマークを押すとRefreshの横にEdit Selectedが出てくるので、Authorizeをクリックしてデバイスを認証する
タイトルなし.png

6. IPアドレスの確認

powershell(管理者権限)
zerotier-cli listnetworks

を実行すると、<ZT assigned ips>にIPアドレスが表示されるのでメモしておく

デスクトップ側の設定

1. OpenSSHサーバのインストール
この記事を参考にしました

OpenSSHサーバがインストールされてるかは以下のコマンドでも確認できる

powershell(管理者権限)
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

OpenSSH.ServerStateInstalledと表示されていればOK

2. ファイアウォールの許可
設定>プライバシーとセキュリティ>ファイアウォールとネットワーク保護>ファイアウォールによるアプリケーションの許可
OpenSSH Serverのプライベート、パブリック両方にチェックを入れる

3. SSHの設定ファイル編集
VSCode(じゃなくてもいいが)でC:\ProgramData\ssh\sshd_configを開く
ファイルが存在しない場合は、C:\Windows\System32\OpenSSH\sshd_config_defaultにあるデフォルト設定をコピーして作成
以下の項目を確認、修正する

sshd_config
Port 22
PermitRootLogin prohibit-password
PasswordAuthentication yes
ListenAddress <IPアドレス>

<IPアドレス>はZeroTireネットワークのIPアドレス
設定を反映させるため、SSHサーバを再起動する

powershell(管理者権限)
Restart-Service sshd

SSHサーバーが起動していることを確認

powershell(管理者権限)
netstat -an | findstr ":22"

LISTENINGが表示されていれば成功

ノート側(VSCode)の設定

1. 拡張機能のインストール
VSCodeに拡張機能Remote-SSHをインストールする
image.png

2. configファイルの設定
~/.ssh/configファイル(ない場合は作成)を編集し、以下を追加

powershell(管理者権限)
Host <Host Name>
    HostName <IPアドレス>
    User <username>
    Port 22
  • <Host Name>は表示されるホスト名なのでなんでもいい
  • <username>はデスクトップPCで使用しているWindowsアカウント名
  • <IPアドレス>はZeroTireネットワークのIPアドレス

3. リモートエクスプローラーから接続

左のバーにある拡張機能Remote-SSHを開くとSSHのところに先ほどの <Host Name>が書いてあるので、右矢印から「現在のウィンドウで接続」or その右をクリックして「新しいウィンドウで接続」
image.png
真ん中上のほうに出てくるのでWindowsを選択
image.png
Windowsアカウントのパスワードを入力
image.png
エクスプローラーを開いて、リモートに接続しましたと書いてあればOK
「フォルダーを開く」から好きなフォルダを開いて作業できる
image.png
作業を終了するときは左下の青い部分をクリックして真ん中上に出てくるやつの一番上に「リモート接続を終了する」とあるのでそれを押せばリモート接続を切断できる
image.png
image.png
最後に、

powershell(管理者権限)
zerotier-cli leave <ネットワークID>

を実行してZeroTierのネットワークから抜ける

接続テスト

1. pingテスト
ノートPCで

powershell(管理者権限)
ping <IPアドレス>

を実行してIPアドレスからの応答を確認できる
応答があれば

powershell(管理者権限)
<IPアドレス> に ping を送信しています 32 バイトのデータ:
<IPアドレス> からの応答: バイト数 =32 時間 <1ms TTL=128
<IPアドレス> からの応答: バイト数 =32 時間 <1ms TTL=128
<IPアドレス> からの応答: バイト数 =32 時間 <1ms TTL=128
<IPアドレス> からの応答: バイト数 =32 時間 <1ms TTL=128
<IPアドレス> の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms

と返ってくる

2. SSH接続テスト
ノートPCのpowershellからZeroTier仮想IPアドレスにSSH接続する

powershell(管理者権限)
ssh <username>@<IPアドレス>
  • <username>はデスクトップPCで使用しているWindowsアカウント名
  • パスワード入力を求められるので、Windowsアカウントのパスワードを入力

接続できなかった場合

powershell(管理者権限)
ssh: connect to host <IPアドレス> port 22: Connection timed out

などと出る

3. SSHポートの開放状況を確認
デスクトップPCのSSHポートが解放されているかノートPCから確認できる

powershell(管理者権限)
Test-NetConnection -ComputerName <IPアドレス> -Port 22

接続できなかった場合

powershell(管理者権限)
ComputerName           : <IPアドレス>
RemoteAddress          : <IPアドレス>
RemotePort             : 22
InterfaceAlias         : ZeroTier One [<ネットワークID>]
SourceAddress          : <IPアドレス>
PingSucceeded          : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded       : False

などと出る

運用

実家に帰る前にデスクトップPCで

powershell(管理者権限)
Restart-Service sshd
zerotier-cli join <ネットワークID>

を実行して電源を切らずに放置しておく
実家に帰ったあと、ノートPCで

powershell(管理者権限)
zerotier-cli join <ネットワークID>

を実行してVSCodeを開きリモートエクスプローラーから接続の手順をこなせばOK

おわりに

SSHキー認証にした方がセキュリティ的には安全らしいので試しましたが、よくわからずうまくいかなかったので一旦断念しました。誰か教えてください。

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?