Windows TerminalにSSH接続を追加する
Microsoftは、従来のコマンドプロンプト(cmd.exe)に代わる新たなターミナルソフト、「Windows Terminal」というアプリを公開しています。
cmd.exeに比べてとても使い勝手がよいため、最近私はcmd.exeの代わりにWindows Terminalを常用しています。また、Windows Terminalは、設定を行えばPowerShell Core (PowerShell7)やWSL2のUbuntuが使用できます。
このウェブサイトを管理するとき、今まではRLoginというソフトを使ってウェブサーバー(さくらのVPS)にログインしていたのですが、今回、RLoginの代わりにWindows Terminalを使うよう設定してみました。
話の前提
さくらのVPSへは、SSHを使って鍵認証でログインする形で接続しています。
今まで私はRLoginというソフトを使ってSSH接続していました。皆さんはTeraTermやPuTTYなどのターミナルソフトをご利用かもしれません。
今回は、RLoginなどのソフトからWindows Terminalに乗り換える、という前提で話を進めます。つまり、Webサーバー側はSSHで鍵認証ログインできるように設定できており、手元のパソコンに鍵ファイルがある、という前提です。
また、Windows TerminalはMicrosoftストアからインストールできます。まだ持っていない方は、こちらからインストールしてください。
OpenSSHが入っているか確認する
まず、Windowsにsshコマンドがあるか確認します。
Windows 10のバージョン1803(2018年4月版)以降、標準でOpenSSHがインストールされているらしいです。まず、それが存在するか確認しておきます。
コマンドプロンプトからwhere ssh
やssh
を実行してみます。
c:\>where ssh
C:\Windows\System32\OpenSSH\ssh.exe
c:\>ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
[-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
[-i identity_file] [-J [user@]host[:port]] [-L address]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R address] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] destination [command]
私のパソコンにも、OpenSSHがインストールされているようです。
sshコマンドを確認する
Windows Terminalの設定を行う前に、sshコマンドでさくらのVPSに接続できるか確認してみます。
最低限、接続先のホスト名(IPアドレス)を指定してssh 123.45.67.89のような感じで接続できますが、おそらくセキュリティーのためにポートを変更したり鍵認証を使っていたりすると思います。それらを含めると、ssh user@host -p port -i id_file_path
という形式になります。ついでに、SSH接続が切断されないようにKeepAliveパケットを送るため、-o ServerAliveInterval=60
という引数も足しておきます。
これを実行すると、鍵ファイルのパスフレーズを聞かれますので、入力します。
c:\>ssh username@123.45.67.89 -p 12345 -i "C:\path\to\.ssh\id_rsa" -o ServerAliveInterval=60
Enter passphrase for key 'C:\path\to\.ssh\id_rsa': パスフレーズを入力
↓ログインできると、接続先サーバーのプロンプトが表示される
Last login: Tue Aug 11 11:44:49 2020 from ***.***.***.***
[username@host ~]$
ちゃんと相手サーバーにログインできて、プロンプトが表示されたらOKです。後ほど、このコマンドをWindows Terminalに設定します。
ちなみに、鍵ファイルのファイルパスに2バイト文字(日本語)が含まれるとダメなようです。英数字だけからなるファイル名・フォルダ名で保存しておいてください。
Windows Terminalの設定
2021/07/03追記:
本記事は、古いWindows Terminalに合わせて執筆したため、JSONファイルを直接いじってプロファイルを追加しています。現在、Windows Terminalのバージョンが上がって設定画面が用意され、プロファイルの追加もGUIから行えるようになりました。
このページにたどり着くような方は、下記のJSONファイルの設定内容と、現在の設定画面の対応関係が分かると思いますので、ひとまずこのまま置いておきます。時間があるときに現在の設定方法で記事を書き直す予定です。
Windows Terminalに、さくらのVPSへ接続するプロファイルを設定します。
Windows Terminalのタブ欄の「v」マークから「設定」を開きます。
すると、何らかのテキストエディターでsettings.jsonファイルが開かれると思います。(私の場合はVisual Studioが開きました)
“list":[ ]の中に、既存のプロファイルがいくつかあると思いますので、その並びにSSH接続のプロファイルを書き足します。
"list" :
[
{
//既存のプロファイル
}, //←カンマを書き足す
{
"name": "さくらのVPS",
"commandline": "ssh username@123.45.67.89 -p 12345 -i \"C:\\path\\to\\.ssh\\id_rsa\" -o ServerAliveInterval=60",
"hidden": false,
"icon": "C:\\path\\to\\Pictures\\Images\\sakura-vps.png",
"backgroundImage": "C:\\path\\to\\Pictures\\Images\\sakura-vps.png",
"backgroundImageAlignment": "bottomRight",
"backgroundImageOpacity": 0.3,
"backgroundImageStretchMode": "none"
} //書き足し終わり
]
最低限必要な設定は、最初の二つです。
- name:任意の名前を指定します。タブ欄の「v」を押したときの一覧に表示されます。
- commandline:上記でコマンドプロンプトからsshコマンドを打って接続の確認をしましたが、そのsshコマンドをダブルクォートでくくって記載します。
- icon:タブ欄に表示されるアイコンを指定したい場合、ここにアイコンのファイルパスを指定します。
- backgroundImage~:このプロファイルで起動したときの背景画像を指定したい場合、これらの項目でファイルパスや表示設定を行います。
なお、json形式の文字列では、ダブルクォートや円マークを円マークでエスケープする必要がありますので気をつけてください(Visual Studioでは、コピペしたときにある程度整形してくれます)。また、iconやbackgroundImageの設定の詳細は、参考サイトをご覧ください。
記載が終わったら、setting.jsonを上書きします。上書きすると、直ちにWindows Terminalに設定が反映されます。フォーマットが間違っていたりするとエラーがでますので、setting.jsonを見直してください。
うまくいくと、次の画像のように、タブ欄の「v」を押すと、追加したプロファイルが出てくるはずです。
クリックしたら鍵認証のパスフレーズを聞かれると思います。パスフレーズを入力して正しく接続できたら設定完了です。
参考サイト
settings.jsonファイルの書き方の詳細は、こちらのサイトをご覧ください。
ディスカッション
ピンバック & トラックバック一覧
[…] AsTechLog 7 PocketsWindows TerminalにSSH接続を追加する | AsTechLoghttps://astherier.co… 覚えたら書く 1 UserPowerShell で sshすると UNPROTECTED PRIVATE KEY FILE – 覚えたら書くhttps://blog.y-yuki.net/entry/2021/04/11/100000パブリッククラウド(等のインターネット空間)にLinuxのサーバ立てて、そこへSSH接続できるようにする場合は、 一般的に 公開鍵認証 の方式にすると思います。 で、試しに Windows の PowerShell から 以下コマンドで、実際にプライベートキーで接続可能かを試すこともあると思います。 ssh -i {キーファイルのパス} {リモートユーザ}@{接続先のIPアドレス or ホスト} 上記コマンドを試した場合に以下のような UNPROTECTED PRIVATE KEY FILE! という表示が出て、接続できないことがあります。 PS C:Users> ssh -i C:SSH… […]