概要
普段自宅のデスクトップPCで趣味開発をしているが、長期で実家に帰るときにクソ雑魚ノートPCでしか作業できないのはしんどいのでノートPCからデスクトップPCにリモートログインできるようにしたい
Chromeリモートデスクトップを使えば簡単に潜れるがコーディングしたいだけの割りには重たいので、VSCodeでSSH接続することを目指す
ネットワークなんもわからず、以前ZeroTierを使った接続を試したがうまくいかなかったため、Tailscaleを使った方法を試した
参考文献:Tailscaleと言う恐ろしく簡単なVPNを見つけたんだが。。。
環境
デスクトップPC:Windows11
ノートPC:Windows11、VSCodeインストール済み
Wi-Fiルータ:マンションの壁に埋め込まれている。これのせいでルータのグローバルIPが取得できなくて困った
Tailscaleの設定
デスクトップPCとノートPCが同じネットワーク(同じ部屋で同じWi-Fiに)に接続していた場合のSSH接続は簡単にできたが、外出先でノートPCが自宅デスクトップPCと異なるネットワークに接続していた場合そうもいかないらしい。
そこでTailscaleを使うと、2つのPCが同じ仮想ネットワークに接続することで外出先でも同じネットワークに接続しているかのようにふるまえるらしい(?)
1. セットアップ
Tailscaleのセットアップ方法を参考に公式サイトでアカウントを作成し、デスクトップとノートの両方にクライアントアプリをインストールする
私はGitHubアカウントで登録しました
2. IPアドレスと接続の確認
Machines - Tailscaleにアクセスすると以下のような画面が出てくるデスクトップ側とノート側のLAST SEENがConnectedになっていることを確認し、デスクトップ側のIPアドレス(赤く囲った部分)をメモしておく
デスクトップ側の設定
1. OpenSSHサーバのインストール
この記事を参考にしました
OpenSSHサーバがインストールされてるかは以下のコマンドでも確認できる
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
OpenSSH.Server
のState
がInstalled
と表示されていればOK
2. ファイアウォールの許可
設定
>プライバシーとセキュリティ
>ファイアウォールとネットワーク保護
>ファイアウォールによるアプリケーションの許可
OpenSSH Serverのプライベート、パブリック両方にチェックを入れる



3. SSHの設定ファイル編集
VSCode(じゃなくてもいいが)でC:\ProgramData\ssh\sshd_config
を開く
ファイルが存在しない場合は、C:\Windows\System32\OpenSSH\sshd_config_default
にあるデフォルト設定をコピーして作成
以下の項目を確認、修正する
Port 22
PermitRootLogin prohibit-password
PasswordAuthentication yes
ListenAddress <IPアドレス>
<IPアドレス>
はさっきメモったIPアドレス
設定を反映させるため、SSHサーバを再起動する
Restart-Service sshd
SSHサーバーが起動していることを確認
netstat -an | findstr ":22"
LISTENING
が表示されていれば成功
ノート側(VSCode)の設定
1. 拡張機能のインストール
VSCodeに拡張機能Remote-SSHをインストールする
2. configファイルの設定
~/.ssh/config
ファイル(ない場合は作成)を編集し、以下を追加
Host <Host Name>
HostName <IPアドレス>
User <username>
Port 22
-
<Host Name>
は表示されるホスト名なのでなんでもいい -
<username>
はデスクトップPCで使用しているWindowsアカウント名 -
<IPアドレス>
はさっきメモったIPアドレス
3. リモートエクスプローラーから接続
左のバーにある拡張機能Remote-SSHを開くとSSHのところに先ほどの <Host Name>
が書いてあるので、右矢印から「現在のウィンドウで接続」or その右をクリックして「新しいウィンドウで接続」
真ん中上のほうに出てくるのでWindowsを選択
Windowsアカウントのパスワードを入力
エクスプローラーを開いて、リモートに接続しましたと書いてあればOK
「フォルダーを開く」から好きなフォルダを開いて作業できる
作業を終了するときは左下の青い部分をクリックして真ん中上に出てくるやつの一番上に「リモート接続を終了する」とあるのでそれを押せばリモート接続を切断できる
接続テスト
1. pingテスト
ノートPCで
ping <IPアドレス>
を実行してIPアドレスからの応答を確認できる
応答があれば
<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からメモったIPアドレスにSSH接続する
ssh <username>@<IPアドレス>
-
<username>
はデスクトップPCで使用しているWindowsアカウント名 - パスワード入力を求められるので、Windowsアカウントのパスワードを入力
接続できなかった場合
ssh: connect to host <IPアドレス> port 22: Connection timed out
などと出る。接続できた場合はexitと入力してEnterで抜けられる
3. SSHポートの開放状況を確認
デスクトップPCのSSHポートが解放されているかノートPCから確認できる
Test-NetConnection -ComputerName <IPアドレス> -Port 22
接続できなかった場合
ComputerName : <IPアドレス>
RemoteAddress : <IPアドレス>
RemotePort : 22
InterfaceAlias : Tailscale
SourceAddress : <ノートPCのIPアドレス>
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : False
などと出る。接続できた場合
ComputerName : <IPアドレス>
RemoteAddress : <IPアドレス>
RemotePort : 22
InterfaceAlias : Tailscale
SourceAddress : <ノートPCのIPアドレス>
TcpTestSucceeded : True
と出る
運用
実家に帰る前にデスクトップPCで
Restart-Service sshd
を実行して電源を切らずに放置しておく
実家に帰ったあと、VSCodeを開きリモートエクスプローラーから接続の手順をこなせばOK
おわりに
SSHキー認証にした方がセキュリティ的には安全らしいので試しましたが、よくわからずうまくいかなかったので一旦断念しました。誰か教えてください。