zaki work log

作業ログやら生活ログやらなんやら

Windows Terminalの新規ターミナルに項目追加して1操作で指定サーバーにssh接続できるようにする

Windows Terminalの「新しいタブ(ターミナル)を開く」に、いつもsshで接続して作業するメインのホストにシェルを起動する。

f:id:zaki-hmkc:20200903075915p:plain

設定箇所

        "list":
        [
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false
            },

            [...]

新しいタブを開くときの項目はここ。
このリストに自分用のカスタム設定を追加すればOK

タブを開く新しい項目を追加する

まずは見よう見まねで名前だけ追加してみる。
リストの末尾への追加時に,のつけ忘れに注意。

            {
                "hidden": false,
                "name": "cloud-dev"
            }

これだけでも項目は追加される。

f:id:zaki-hmkc:20200903075956p:plain

ただし中身はcmd.exeのように見える

f:id:zaki-hmkc:20200903080024p:plain

追加項目のコマンドにsshを指定する

commandlineを使って、ターミナルで起動するコマンドを指定する。

            {
                "hidden": false,
                "name": "cloud-dev",
                "commandline": "ssh.exe zaki@cloud-dev"
            }

f:id:zaki-hmkc:20200903080642p:plain

はい、できました。

公開鍵認証設定してパスワードを聞かれないようにする(OpenSSH一般)

(以下、OpenSSH一般の話)

鍵設定されてなくてパスワード認証される場合は、ターミナルを開いた際にパスワードを聞かれる。

f:id:zaki-hmkc:20200903080855p:plain

回避するにはパスフレーズなし秘密鍵を作成し、

  • デフォルトの鍵ファイル名にする
  • .ssh/configに設定
  • commandline指定のsshコマンドライン-iで鍵ファイル指定

の、どれかを設定すればOK

パスフレーズなしキーペア作成と設定

Windows版OpenSSHでも作れた。

PS C:\Users\zaki> ssh-keygen.exe -t rsa -f .\.ssh\id_rsa_nopass
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in .\.ssh\id_rsa_nopass.
Your public key has been saved in .\.ssh\id_rsa_nopass.pub.
SHA256:x5sVSZnowmQOkBRiv0T3w+lTqNzJvzx6hpwDlQVbWgQ zaki@mascarpone
The key's randomart image is:
+---[RSA 2048]----+
|  o.=+. E++..o   |
| . +...ooBo.o.   |
|    o  *O+. o    |
|   . o =*=.  .   |
|    . o.S.o .    |
|      .  + +     |
|       o o+      |
|        =.+.     |
|        .=o.     |
+----[SHA256]-----+

Windows版は-N ""が効かなかったんで、対話式に空パスフレーズ入力。

ただ、ssh-copy-idが無いので手動で接続先サーバーに登録する。
(てか、昔はssh-copy-idって無かった気がするので、いつもscpしてcat >>してたような…)

PS C:\Users\zaki> cat .\.ssh\id_rsa_nopass.pub | ssh zaki@cloud-dev sh -c "cat - >> ~/.ssh/authorized_keys"
zaki@192.168.0.18's password:

なんかもうちょっとシュッとできそうな気もするけど、ローカルの公開鍵をcatした結果を、リモートにsshしたホスト上でcatでファイルに追記している。

-i で秘密鍵ファイル指定でssh

PS C:\Users\zaki> ssh zaki@cloud-dev -i .\.ssh\id_rsa_nopass
Last login: Thu Sep  3 08:08:21 2020 from 192.168.0.220
[zaki@cloud-dev ~]$

パスフレーズなし秘密鍵-iで指定すれば公開鍵は設定済みなのでパスなしsshできた。

.ssh/configに鍵ファイルパス指定

結局-iだと毎回指定が必要で面倒なので、別アプリでも共通設定になる.ssh/config(%USERPROFILE%\.ssh\config)に鍵設定。

Host cloud-dev
  HostName 192.168.0.18
  User zaki
  IdentityFile C:\Users\zaki\.ssh\id_rsa_nopass

すれば、鍵の指定も不要でsshログイン

PS C:\Users\zaki> ssh zaki@cloud-dev
Last login: Thu Sep  3 08:16:03 2020 from 192.168.0.220
[zaki@cloud-dev ~]$

何が言いたいかというと、.ssh/configの設定だったらVS Code + Remote Development + SSHみたいな別アプリでも設定が共通ということ。

Windows Terminalの設定

.ssh/configに設定してあればそのまま、指定してなければ

"commandline": "ssh.exe zaki@cloud-dev -i C:\\Users\\zaki\\.ssh\\id_rsa_nopass"

みたいな感じにすれば

f:id:zaki-hmkc:20200903081705p:plain

この通り、パスワードを聞かれることなくsshログインしてリモートのシェルを起動できる。

アイコン

機能的にはもう問題ないけど、見た目さみしいのでアイコンも設定してみる。
サンプルとしてこちらからアイコンを拝借。

iconmonstr.com

ダウンロードして任意の場所に保存したら、iconにそのパスを指定すればOK

            {
                "hidden": false,
                "name": "cloud-dev",
                "commandline": "ssh.exe zaki@cloud-dev",
                "icon": "C:\\Users\\zaki\\Pictures\\icon\\terminal\\iconmonstr-keyboard-2-240.png"
            }

f:id:zaki-hmkc:20200903082251p:plain

良い感じになった。
実行中もこの通り。

f:id:zaki-hmkc:20200903082355p:plain

もちろん、表示されているショートカット(上記だとCtrl + Shift + 5)も効く。
自動で割り当てられるショートカットは定義順っぽい。
(例えば2番目に入れ替えるとCtrl + Shift + 2に変化した)


参考

zaki-hmkc.hatenablog.com

zaki-hmkc.hatenablog.com

docs.microsoft.com

news.mynavi.jp