LoginSignup
0
0

鍵認証でログインする(ssh-keygen, ssh, chown, chmod)

Last updated at Posted at 2024-05-08

秘密鍵と公開鍵の鍵ペアを作って、認証を行う方法。

ローカル環境でssh-keygenを実行する。

$ ssh-keygen

ssh-keygenを実行すると、次の項目を設定することになる。

  • 鍵の保存先。特に何も指定しなければ/home/username/.ssh/id_rsaに保存される。
  • パスフレーズ

パスフレーズとは、万が一秘密鍵が漏洩した場合などに備えて、秘密鍵に設定するパスワードである。

鍵の保存先とパスフレーズを決めると、鍵の保存先として指定したディレクトリに秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が生成されている。

ここで生成した公開鍵(id_rsa.pub)を認証を通したいサーバに公開鍵を配置する。認証を通したいサーバに公開鍵を配置するには、認証を通したいサーバの管理者等に問い合わせて配置してもらうといった必要がある。

公開鍵を配置するサーバの管理者は、公開鍵を認証を通したいユーザーのホームディレクトリ化の.sshディレクトリに受け取った公開鍵をauthorized_keysという名前で保存すると、公開鍵として設定できる。

公開鍵を配置したら、サーバの管理者は.sshディレクトリの所有権の変更(chown)とパーミッションの変更(chmod)を行う。

$ sudo chown -R username:username ~username/.ssh
$ sudo chmod 700 ~username/.ssh
$ sudo chmod 600 ~username/.ssh/authorized_keys

サーバに公開鍵を配置してもらったユーザーは、sshコマンドを実行して、ssh-keygenを実行した時に設定したパスフレーズを入力すると、認証を通したいサーバへログインできる。

例えば、usernameというユーザー名で、接続先サーバーのIPアドレスが192.168.11.14のときは、

$ ssh username@192.168.11.14

とすればよい。
sshを実行すると、パスワードの入力を求められるので、設定したパスフレーズを入力するとログインできる。

定期処理でscpを使いたいとき

パスフレーズを指定せずに秘密鍵を生成すると、自動的に鍵認証できる。
これを利用して、cronjobで登録したジョブに対して、鍵認証を必要とする処理を実行させることができる。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yourname/.ssh/id_rsa): /home/yourname/.ssh/newkey
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

以上は、ssh-keygenコマンド実行後、パスフレーズ無しで鍵ペアをそれぞれnewkey, newkey.pubで生成する場合の例である。
Enter passphraseでパスフレーズの入力を求められるが、この時に何も入力せずにEnterを入力すると、パスフレーズ無しで秘密鍵を生成できる。

次に、生成した公開鍵をサーバ上に配置する。配置先のサーバに既に公開鍵が設定されている場合は、以下のように>>を利用して、既存の公開鍵に、新しい公開鍵を追加する。

$ scp ~/.ssh/newkey.pub username@192.168.11.14:/tmp/
$ ssh username@192.168.11.14
$ cat /tmp/newkey.pub >> ~/.ssh/authorized_keys

追加した公開鍵の行の先頭に、公開鍵で実行させたいコマンドを追記する。

~/.ssh/authorised_keys
command="実行させたいコマンド"
glrjn0239tjeroemgoirjipgj3ngu23tu1-grnov9ahuy5rg
xcvklmwoig40bnboaejrh02tjgfj2t-afogpdfjlasdnlxvl
...

実行させたいコマンドでscpを実行するしたいときは、ダウンロードする場合とアップロードする場合で、それぞれ-f,-tオプションを付ける。

command="scp -f /var/log/apache2/access.log" (ファイルをダウンロードしたいとき)
command="scp -t /home/username/Documents/doc.txt" (ファイルをアップロードしたいとき)

ローカルからコマンドを実行して、サーバ上の公開鍵に登録しておいたコマンドを実行する際は、サーバ上へ追加した公開鍵に対応する秘密鍵のパスを-iオプションを使って、指定してあげる必要がある。
指定する方法は、-iに続けて秘密鍵のファイル名を指定すればよい。

$ scp -i ~/.ssh/newkey username@192.168.11.14:/var/log/apache2/access.log /tmp/local/access.log
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0