皆さんこんにちは
ゼミの卒業研究(ディープラーニング、自然言語処理)のために、研究室にあるGPUを積んだPCにつなぎたいと考えかなり奮闘しました。
AWSのEC2インスタンスへのSSH接続の経験はあるのですが、実際のPCにSSH接続をするのは初めてだったため、備忘録も兼ねて記事にしたいと思います。
実行環境
- サーバーOS:Windows10 Home
- クライアントOS:M1 MacOS Monterey(12.4)
手順
サーバー(Windows)側の作業: S
クライアント(Mac)側の作業: C
- WSLのインストール(S)
- OenSSHのインストールおよび設定(S)
- sshd_configの編集(S)
- SSH鍵の作成(C)
- 公開鍵の登録(S)
- SSH接続(C)
作業
基本的にPowerShellを開くときは「管理者として実行する」を選択してください。
WSLのインストール(S)
PowerShellを管理者として実行し以下のコマンドを実行する。
wls --update
wsl --set-default-version 2
wsl --install -d Ubuntu
するとUbuntuの画面が起動され新しくユーザー名とパスワードが要求されますので入力してください。
Enter new UNIX username: ユーザー名
New password: パスワード
Retype new password: もう一度パスワードを入力
ここで入力したユーザー名とパスワードはSSH接続時に必要なるため、各自メモしておいてください。
OenSSHのインストールおよび設定(S)
OpenSSH サーバー
Windows+Sを押して、「オプション機能を追加する」と検索する。
「機能の追加」から「OpenSSH サーバー」をインストールする。
ただし、既にインストールされている場合はこの作業は行わなくて良い。
OpenSSH 設定
PowerShellを管理者として実行する。
SSH接続時にデフォルトのターミナルをBashに変更する。
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\bash.exe" -PropertyType String -Force
Firewallのポートを開放。
netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=22
PC起動時にOpenSSHサーバーが自動で起動するに設定する。
これを行わないとPCを起動するたびにOpenSSHを起動するコマンドを打たなければならない。
Set-Service sshd -StartupType Automatic
ここで一度PCを再起動しましょう。
再起動したら、PowerShellを管理者として実行しOpenSSHの起動状態を確認。
Get-Service sshd
Status Name Displayname
------ ---- -----------
Running sshd OpenSSH SSH Server
Status
がRunning
状態ならOKです。
sshd_configの編集(S)
C:\ProgramData\ssh\sshd_config
をエディタで開き、以下の2箇所を修正する。
ProgramData
が表示されない場合は隠しファイル表示の設定を変更してください。(https://androidlover.net/android-emulator/bluestacks/windows-hidden-programdata-folder-appear.html)
- # PasswordAuthentication no
+ PasswordAuthentication yes
- Match Group administrators
- AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
+ # Match Group administrators
+ # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
SSH鍵の作成(C)
今度はクライアント側に戻りSSH鍵の作成を行います。
ssh-keygen -t rsa -b 4096 -o -a 100 -f ~/.ssh/example
パスフレーズが要求されるので忘れないようなフレーズを入力してください。
今回のSSH接続では特に使いません。
すると、~/.ssh
ディレクトリにexample.pub
とexample
ファイルが作成されます。
example
の名前を変えたい方は、SSH鍵作成コマンドの-f ~/.ssh/example
を変更してください。
公開鍵の登録(S)
上で作成したexample.pub
(公開鍵)をC:\Users\{user_name}\.ssh
に作成し、example.pub
をauthorized_keys
に名前を変更する(拡張子なし)。
以上でSSH接続するための設定は完了です。
SSH接続(C)
最後にSSHの接続を行います。
そのために、まずはサーバー側のIPアドレスを取得しましょう。
PowerShellを開きipconfig
を実行。
ipconfig
そして、IPv4
がSSH接続するIPアドレスになります。
ssh -i ~/.ssh/example ubuntuのユーザー名@ipアドレス
パスワードが要求されるのでUbuntuのパスワードを入力しましょう。
SSH接続ができない
SSH接続ができない場合、ネットワーク(パブリックネットワーク)のファイアウォールをオフにして試してみてください。(https://onl.sc/Ftj2S6c)
それでもできない場合はセキュリティソフトが許可していない、もしくはどこかの設定がミスってます。
特に会社のPCに接続するとなると、セキュリティソフトが許可していない場合が多いので、そのときは諦めましょう。
接続先でVSCodeを開きたい
SSH接続したはいいものの、実際に作業するとなったらエディタを使用して作業したいですよね。
その時はVSCodeの拡張機能を使って作業できるので、以下の記事を参考にしてやってみてください。
いつでもSSH接続したい
SSH接続するときはサーバー側の電源がON、もしくはスリープ状態でないことが条件です。
ですので、サーバー側がスリープ状態に入らないように設定すればOKです。
以下の記事を参考に設定を行ってください。
最後に
いかがだったでしょうか?
MacからWindowsにSSHでつなぐリソースがかなり少なかったため、このように記事にしました。
初めはMacからWindowsにつなぐとか絶対めんどいやん。。。とか思ってたんですけど、多分Windows間でSSH接続するほうがもっと大変だろうなと感じました。
何はともあれできてよかったです。
ご不明等あれば遠慮なくコメントの方にてお知らせください。
Thank you for reading
参考文献