Tecmint.comは10月5日(米国時間)、事「Setup Passwordless SSH Login for Multiple Remote Servers Using Script」において、スクリプトを利用して複数のリモートサーバに対して一括でパスワードなしのSSHログインを設定する方法を紹介した。パスワードなしのSSHログインは公開鍵を利用することで設定できるが、複数のサーバに対してひとつずつ公開鍵の設定をするのは少々手間がかかる。記事で紹介されている方法では、簡単なシェルスクリプトを組むことで、リストアップしたサーバに対して一斉に公開鍵を設定する。

まず、下図のようにssh-keygenコマンドでローカルホストの秘密鍵と公開鍵を作成する。赤線は鍵ファイルの保存場所で、赤矢印の箇所では鍵のパスフレーズを入力する。

  • 秘密鍵と公開鍵を作成する

    秘密鍵と公開鍵を作成する

続いて、リストアップしたサーバに一斉に公開鍵をコピーするシェルスクリプトを作成する。元記事のスクリプトはサーバ側がすべて22番ポートでssh接続を受け付ける前提になっているが、筆者の環境ではサーバごとに使用するポート番号が異なることがあるため、パラメータとしてIPアドレス(ホスト名)だけでなくポート番号も指定できるように修正した。下図の赤い四角で囲った部分が修正した場所である。また、赤矢印の箇所は自分の環境に合わせてユーザー名とサーバリストのファイルのパスを書き換える必要がある。

  • 修正したssh-copy.shの例

    修正したssh-copy.shの例

秘密鍵を設定したいサーバリストのファイルは次のようになる。IPアドレスのあとにスペースを挟んでポート番号を記載する。

  • hostsファイルの記述例

    hostsファイルの記述例

準備ができたら、ssh-copy.shファイルに実行権限を付加して、スクリプトを実行しよう。スクリプトのパラメータにはコピーする公開鍵のファイルを指定する。途中で各サーバのパスワードの入力を求められるので、それぞれのサーバのものを入力する。

  • ssh-copy.shを実行する

    ssh-copy.shを実行する

サーバに公開鍵が設定できたら、次にssh-addコマンドを利用してローカルのssh-agentに対応する秘密鍵を追加する。これでログインの際のパスフレーズの入力が省略できる。

  • ssh-agentに秘密鍵を追加する

    ssh-agentに秘密鍵を追加する

ここまで設定が完了したら、試しにどれかのサーバにsshログインしてみよう。パスワードの入力なしでログインできれば成功だ。

筆者はmacOSのターミナルを使用して実験したが、BashとSSHが使える環境であれば同じ方法で設定することができる。たとえばWindowsでも、WSL(Windows Subsystem for Linux)でBashが使用できるため、この方法は有効だ。