パスワードなしでSSHログインを実現する方法:ssh-keygenとssh-copy-idを使った3つの簡単ステップ
リモートのLinuxサーバーにパスワードを入力せずにログインしたいと思ったことはありませんか?実は、ssh-keygenとssh-copy-idという2つのコマンドを使えば、わずか3つのステップでパスワードレスSSH環境を構築できます。本記事では、その具体的な手順をわかりやすく解説します。
ssh-keygenは、公開鍵と秘密鍵のペアを生成するコマンドです。ssh-copy-idは、ローカルホストの公開鍵をリモートホストのauthorized_keysファイルにコピーするコマンドで、あわせてリモートホストのホームディレクトリ、~/.ssh、~/.ssh/authorized_keysにも適切なパーミッションを自動的に設定してくれます。
さらに本記事では、ssh-copy-idを使う際に知っておきたい3つの注意点と、ssh-agentと組み合わせる便利な使い方についてもご紹介します。
ステップ1:ローカルホストでssh-keygenを使って鍵ペアを作成する
まず、接続元となるローカルホストでssh-keygenコマンドを実行し、RSA方式の鍵ペアを生成します。
jsmith@local-host$ [注:ここはローカルホスト上です] jsmith@local-host$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[そのままEnterキーを押す] Enter passphrase (empty for no passphrase): [そのままEnterキーを押す] Enter same passphrase again: [そのままEnterキーを押す] Your identification has been saved in /home/jsmith/.ssh/id_rsa. Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub. The key fingerprint is: 33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9 jsmith@local-host
保存先やパスフレーズをすべてデフォルトのまま進めると、秘密鍵(~/.ssh/id_rsa)と公開鍵(~/.ssh/id_rsa.pub)が生成されます。セキュリティを強化したい場合はパスフレーズを設定し、後述のssh-agentと併用するのがおすすめです。
ステップ2:ssh-copy-idで公開鍵をリモートホストにコピーする
次に、ssh-copy-idコマンドを使って、ローカルホストの公開鍵をリモートホストに転送します。-iオプションでコピーする公開鍵ファイルを明示的に指定しましょう。
jsmith@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host jsmith@remote-host's password: Now try logging into the machine, with "ssh 'remote-host'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
注意: ssh-copy-idは、リモートホストの.ssh/authorized_keysにある既存の鍵を上書きせず、追記(append)する仕様になっています。そのため、他の端末からの接続設定を壊す心配はありません。
ステップ3:パスワードなしでリモートホストにログインする
最後に、通常どおりsshコマンドでリモートホストに接続してみましょう。パスワードを聞かれることなくログインできれば成功です。
jsmith@local-host$ ssh remote-host Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2 [注:SSHはパスワードを要求しません] jsmith@remote-host$ [注:ここはリモートホスト上です]
以上の3つのシンプルなステップで、多くの場合は問題なくパスワードレスログインの設定が完了します。
なお、以前の記事ではopenSSH同士でパスワードなしのSSH・SCPを行う詳細な手順を解説しています。また、SSH2をご利用の場合は、SSH2同士、OpenSSHからSSH2、SSH2からOpenSSHといった各組み合わせでのパスワードなし接続の方法も過去に紹介しているので、あわせて参考にしてください。
ssh-add/ssh-agentと組み合わせてssh-copy-idを使う
-iオプションに値を指定せず、かつ~/.ssh/identity.pubが存在しない場合、ssh-copy-idは以下のようなエラーメッセージを表示します。
jsmith@local-host$ ssh-copy-id -i remote-host /usr/bin/ssh-copy-id: ERROR: No identities found
しかし、事前にssh-addコマンドで鍵をssh-agentに登録しておけば話は別です。-iオプションを省略しても、ssh-copy-idが自動的にssh-agentから鍵を取得し、リモートホストへコピーしてくれます。つまり、「ssh-add -L」の出力内容がそのままコピーされる仕組みです。
jsmith@local-host$ ssh-agent $SHELL jsmith@local-host$ ssh-add -L The agent has no identities. jsmith@local-host$ ssh-add Identity added: /home/jsmith/.ssh/id_rsa (/home/jsmith/.ssh/id_rsa) jsmith@local-host$ ssh-add -L ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsJIEILxftj8aSxMa3d8t6JvM79DyBV aHrtPhTYpq7kIEMUNzApnyxsHpH1tQ/Ow== /home/jsmith/.ssh/id_rsa jsmith@local-host$ ssh-copy-id -i remote-host jsmith@remote-host's password: Now try logging into the machine, with "ssh 'remote-host'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. [注:ssh-add -Lで表示された鍵が追加されました]
パスフレーズ付きの鍵を運用している場合でも、ssh-agentを経由することで毎回のパスフレーズ入力を省略できるため、セキュリティと利便性を両立できます。
ssh-copy-idの3つのちょっとした不便な点
非常に便利なssh-copy-idですが、知っておくべき小さな課題がいくつかあります。
- デフォルトの公開鍵の挙動: -iオプションに値を渡さない場合、ssh-copy-idは~/.ssh/identity.pubのみをデフォルトの公開鍵として扱います。id_dsa.pubやid_rsa.pubなどが存在しても自動的には選択されません。これらのうちいずれかがあれば優先的に利用し、複数ある場合はidentity.pubを採用する、といった挙動が理想的と言えます。
- エージェント未登録時の誤動作: ssh-agentが起動していても、ssh-add -Lが「The agent has no identities」を返す状態(=鍵が未登録)だと、ssh-copy-idがこのメッセージ文字列自体をリモートホストのauthorized_keysに書き込んでしまうことがあります。実行前には必ず鍵が登録されているか確認しましょう。
- authorized_keysの重複エントリー: ssh-copy-idには重複チェック機能がないため、ローカルホストで何度も実行すると、同じ鍵がリモートホストのauthorized_keysに繰り返し追記されます。重複があっても動作上の問題はありませんが、管理性を考えるとファイルはすっきりさせておきたいものです。気になる場合は、定期的にauthorized_keysの中身を見直して整理するとよいでしょう。
以上の点に留意すれば、ssh-copy-idは安全かつ効率的なパスワードレスSSH環境の構築に役立つ強力なツールです。ぜひ日々のサーバー運用に取り入れてみてください。
-
Linux初心者・管理者必見!無料で読めるシェルスクリプト電子書籍4選
システム管理とは何か システム管理(System Administration)は情報技術(IT)の一分野であり、マルチユーザーのコンピュータシステムやサーバーを安定的に稼働させ続けることを担います。この安定稼働に責任を持つ人物をシステム管理者(System Administrator)と呼びます。 専門分野がLinuxであるシステム管理者は「Linuxシステム管理者」と呼ばれます。その役割は非常に多岐にわたり、ハードウェアの保守、システムメンテナンス、ユーザー管理、ネットワーク管理、システムパフォーマンスの監視、リソース使用状況のモニタリング、バックアップ、セキュリティの確保、システム更新、
-
Bashスクリプトをマスターしてワークフローを強化:開発者と管理者のための初心者向け入門講座
Bashスクリプトは、反復的なタスクを自動化し、日々の作業効率を高めたいと考えているすべての開発者、システム管理者、パワーユーザーにとって欠かせないスキルです。 このたび、無料で学べるプログラミング学習プラットフォーム「freeCodeCamp.org」のYouTubeチャンネルで、初心者向けのBashスクリプト講座が公開されました。講座を担当するのは、HerbertechのHerbert氏です。 この講座で学べること 本講座では、Bashスクリプティングの基礎を段階的に習得できます。主な学習内容は以下のとおりです。 基本的なコマンドの使い方と最初のBashスクリプトの書き方 変数と位置引