面白そうなサービスを見つけたので紹介します。タイトル通り、Tailscaleというサービスを利用し、SSHのキー管理無しでSSH環境を構成・運用できます*1。
Tailscaleについて
まず、Tailscaleについて簡単に紹介します。
TailscaleはマネージドのVPNサービスで、利用者がVPNサーバを構築することなく、リモートアクセスしたい端末にTailscaleをインストールし、Tailscaleを起動するだけでリモートアクセスを実現できます。 認証にMicroSoftやGitHubのSSOを利用可能です。
また、端末同士の通信は peer-to-peer 型となっており、Tailscaleのサーバを介さないため、高いスループットの実現が期待できます。
その他特徴は以下リンク等を参照ください。
Tailscale SSHについて
さて、今回紹介したいのは最近リリースされたTailscale SSHという機能です(現在β公開)。
Tailscale SSH allows you to establish SSH connections between devices in your Tailscale network, as authorized by your access controls, without managing SSH keys, and authenticates your SSH connection using WireGuard®
Tailscale SSHを使用すると、SSHキーを管理せずに、Tailscaleのアクセス制御の承認によってTailscaleネットワーク内のデバイス間にSSH接続を確立し、WireGuard®を使用してSSH接続を確立できます。
本機能を用いることで、TailscaleのソフトウェアによってSSHアクセスが実現され、認証等がTailscaleで行われるため、一般的なSSH接続に必要だった公開鍵・秘密鍵の配置が必要無くなります。そもそもOSにsshdのデーモンが起動している必要が無くなります。
SSH接続にはあらかじめアクセスしたい端末がTailscaleのVPNに接続されている必要があります。つまり通信としては、SSH over Tailscale のような形となります。
ユーザーのアクセス管理はTailscaleのACLで管理可能であるため、鍵の作成・配置といった煩わしい作業から解放されます。また、アクセス管理を管理画面で集中的に行えるようになるため、例えば踏み台サーバへのアクセス管理におけるチームメンバの出入り等において、SSHの許可のメンテナンス作業が簡単になることが期待できます。
手順
実際に試してみましたので簡単に手順を紹介します。
構成
- SSHサーバ:Amazon Linux2(VPC)
- SSHクライアント:Windows 11(オンプレ)
手順
Tailscaleのインストール&起動
それぞれの環境に合わせてTailscaleをインストールします。例えばAmazon Linux2なら以下だけです。
$ curl -fsSL https://tailscale.com/install.sh | sh
インストールが完了したらサービスを起動します。 初回起動時は認証が求められますので、表示されるURLにアクセス&ログインすると、Tailscaleを起動できます。
$ sudo tailscale up To authenticate, visit: https://login.tailscale.com/a/xxxxxx
起動&接続に成功すると、Tailscaleの管理画面で以下のように Connected
と表示されます。
Tailscale SSH の起動
次にTailscale SSHによりSSHサーバを起動します。
$ sudo tailscale up --ssh
これにより、SSHサーバの起動に成功すると下図のようにTailscaleの管理画面で当該端末にSSHのラベルが付与されます。
SSH接続
それではクライアントからSSH接続を試してみましょう。 クライアント端末にもTailscaleをインストール&起動します。
Tailscaleの起動を確認したら下記のように普通のSSHクライアントで接続できます。ec2-user
は適宜接続するユーザー名に読み替えてください。公開鍵・秘密鍵の設定や、パスワード等の認証は不要で接続できます。
宛先IPアドレスはTailscaleの管理画面で確認してください。 100.X.X.XのIPアドレスが付与されているはずです。
ssh ec2-user@[TailscaleのIPアドレス]
アクセス制御
最後にアクセス制御について触れておきます。SSHできるユーザーのアクセス管理はTailscaleのACLで設定可能となっています。
例えば下記の例では ec2-user
のみにSSH接続を許可しており、その他のユーザーはアクセスができない状態になります。
"ssh": [ // Allow all users to SSH into their own devices in check mode. // Comment this section out if you want to define specific restrictions. { "action": "check", "src": ["autogroup:members"], "dst": ["autogroup:self"], "users": ["ec2-user"], // 🌟 }, ],
おわりに
Tailscale SSHでSSHのキー管理から解放された世界線をお届けしました。現場からは以上です。
*1:現在β公開のステータスです
紅林輝(くればやしあきら)(サービス開発部) 記事一覧
サービス開発部所属。2015年にサーバーワークスにJOIN。クラウドインテグレーション部を経て、現在はCloud Automatorの開発に従事。ドラクエ部。推しナンバーはⅤ、推しモンスターはクックルー。