SSH接続を利用する

【連載】

1からマスター! Windows Terminal入門

【第33回】SSH接続を利用する

[2020/08/27 08:00]佐々木宣文 ブックマーク ブックマーク

WSLやAzureサービスだけでなく、通常のSSH接続での作業にWindows Terminalを使うケースも少なくないだろう。日常的に利用するサーバへSSH接続するのに、わざわざPowerShellやWSL環境のLinuxからsshコマンドを入力するのはちょっと煩わしい。そんなときは、対象にサーバへのSSH接続用のプロファイルを作ってしまえばよい。

PowerShellを使ったSSH接続

まずは、PowerShellを使って普通にSSH接続してみよう。WindowsにはデフォルトでSSHクライアントが用意されているので、SSHを使うのに特に追加でソフトウエアをインストールする必要はない。SSH接続のためのプログラムは「ssh.exe」だが、PowerShellではsshコマンドとしてエイリアスが用意されているので、次のようにコマンドを入力することでSSH接続できる。<ユーザー名>と<ホスト名>の部分は、各自の接続先サーバのユーザー名とホスト名に置き換えていただきたい。なお、ホスト名の代わりにIPアドレスを記入してもよい。

> ssh <ユーザー名>@<ホスト名>

sshコマンドが使用するデフォルトのポート番号は22だが、もし接続先サーバで別のポート番号が指定されている場合には、次のように「-p」オプションでポート番号を指定すればよい。

> ssh -p <ポート番号> <ユーザー名>@<ホスト名>

接続に成功したら、パスワードを入力するように求められるはずだ。

SSH接続用のプロパティを作成する

たまにしかログインしないサーバであれば、上記のようにコマンド入力でSSHセッションを始めるやり方でも問題ないが、頻繁に利用するサーバでは少し面倒だ。そこで、Windows Terminalでタブを開いたときに自動でsshコマンドを実行してセッションを開始できるようにしてみよう。そのためには、指定のサイトにSSH接続する専用のプロファイルを作成すればよい。

「setting.json」のプロファイル設定で、commandline属性の値によって使用するコマンドラインツールのプログラムを指定できることは、第26回第30回で説明した。例えば、コマンドプロンプトの場合はcommandline属性の値として実行ファイルの「cmd.exe」が指定されている。

実は、sshコマンドもこのcommandline属性の値として設定することができるようになっている。例えば、「MyHostへの接続」という名前のプロファイルを作成して、スタート時に自動でSSH接続を始めるように設定するには、次のような設定を追加すればよい。

{
    "guid": "{5fa2a3c4-c9db-4743-a01c-3ce1988f6231}",
    "hidden": false,
    "name": "MyHostへのSSH接続",
    "commandline": "ssh <ユーザー名>@<ホスト名>"
}

commandline属性の値には、SSH接続時のsshコマンドの記述内容をそのまま設定する。「guid」については、PowerShellで次のコマンドを実行すれば、新しいguidを取得できるので、その値を設定すればよい。

> [Guid]::NewGuid()

Guid
----
5fa2a3c4-c9db-4743-a01c-3ce1988f6231

設定が反映されたら、タブバー横のドロップダウンメニューに、下図のように「MyHostへのSSH接続」というプロファイルが追加されているはずだ。

新しいプロファイルが追加されている

これを選択すると、新規タブでは自動的にSSH接続を行い、ログインパスワードの入力が求められる。

公開鍵認証を使用してSSH接続する

SSH接続に公開鍵認証を使うこともできる。通常のSSH接続で公開鍵認証を使用するには、次のように「-i」オプションで秘密鍵のパスを指定してsshコマンドを実行する。

> ssh -i <秘密鍵のパス> <ユーザー名>@<ホスト名>

WindowsのSSHクライアントは、デフォルトではユーザーのホームディレクトリ直下にある.sshディレクトリを設定ファイルのパスとして使用する。その場所に秘密鍵がある場合のsshコマンドは次のようになる。

> ssh -i C:\Users\<Windowsのユーザ名>\.ssh\<秘密鍵のファイル名> <ユーザー名>@<ホスト名>

この-iオプションを付けたsshコマンドを、setting.jsonのcommandline属性の値に設定する場合、次のような記述になる。

{
    "guid": "{5fa2a3c4-c9db-4743-a01c-3ce1988f6231}",
    "hidden": false,
    "name": "MyHostへのSSH接続",
    "commandline": "ssh -i C:\\Users\\<Windowsのユーザー名>\\.ssh\\<秘密鍵のファイル名> <ユーザー名>@<ホスト名>"
}

属性の値の記述ではバックスラッシュ(\)はエスケープする必要があるので、ディレクトリの区切り文字がエスケープ付き二重のバックスラッシュ(\)になっている点に注意しよう。

接続先のホスト側に正しく対応する公開鍵が設定されていれば、このプロファイルをスタートしたときのSSH接続はパスワード無しでセッションを開始することができる。

configファイルでSSH接続情報を管理する

SSH接続の情報をconfigファイルを使って管理することもできる。前述のようにSSHクライアントのデフォルトの設定ファイルの配置場所はユーザーのホームディレクトリ直下にある.sshディレクトリである。例えば、mynaviユーザーでログインしている場合は、一般的には「C:\Users\mynavi.ssh\」となる。

この場所に「config」という名前のファイルを作成し(「config.txt」のように拡張子が付いていてはダメなので注意)、次のような設定を記述する。<ホスト名>、<ポート番号>、<ユーザー名>、<秘密鍵のパス>の部分は、それぞれ各自の環境に合わせて記述する。「myhost」というのが接続名になるが、これも任意の名前を設定してよい。

Host myhost
   HostName <ホスト名>
   Port <ポート番号>
   User <ユーザー名>
   ForwardAgent yes
   IdentityFile <秘密鍵のパス>

このように設定しておけば、sshコマンドを使った接続は次のように接続名を使ってシンプルに行うことができる。

ssh myhost

接続名を使ったSSH接続の場合、setting.jsonのcommandline属性の値は次のような記述になる。

{
    "guid": "{5fa2a3c4-c9db-4743-a01c-3ce1988f6231}",
    "hidden": false,
    "name": "MyHostへのSSH接続",
    "commandline": "ssh myhost"
}

Windows TerminalでSSH接続を利用するメリットは、PowerShellやWSLなどと併用する場合でも、1つのアプリケーション内ですべて作業を完結できる点だろう。SSH接続ができるターミナルアプリケーションはサードパーティ製のものもいろいろと提供されているが、今後はその選択肢の1つにWindows Terminalを加えてみてはどうだろうか。

参考資料

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
ミッションステートメント
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
対話システムをつくろう! Python超入門
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
PowerShell Core入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る