Help us understand the problem. What is going on with this article?

ssh公開鍵認証設定まとめ

ssh 公開鍵認証設定まとめ

sshでLinuxサーバーへ接続する際のまとめ。
クライアント: Mac
サーバー: CentOS 6.5
を想定

公開鍵、秘密鍵を生成する

# このコマンドの後にパスワードの設定を聞かれる。
# パスワード無しの場合は何も入力せずにEnterを押す (非推奨)
ssh-keygen -t rsa

デフォルトの設定では、

公開鍵: ~/.ssh/id_rsa.pub
秘密鍵: ~/.ssh/id_rsa

秘密鍵は 絶対に流出させない ようにすること。
流出したら鍵を作りなおして、サーバーに登録した公開鍵を削除して登録しなおせば良い。

※2018/10/02追記
最近はrsa鍵を使うのは古い。
おすすめはecdsa、CentOS5等古い環境にアクセスするならrsa、ssh周りの知識があるならed25519が良さげ。
* ecdsa 521bit(512bitではない) ssh-keygen -t ecdsa -b 521
* ed25519 ssh-keygen -t ed25519

秘密鍵をキーチェインに登録しておく(Mac限定)

sshするたびに秘密鍵のパスワード打つのは面倒臭いので、
Macの場合はキーチェインに登録が便利に使える。
ただし、Macを乗っ取られた際のリスクは増すので注意すること。

# ssh-agentへ登録する (-KオプションはMacのみ使用できる)
ssh-add -K ~/.ssh/id_rsa

※2019/06/11追記

最近のMacに載ってる ssh-add では -K オプションは少し違うらしい。

-K オプションでキーチェーンに鍵を登録、 ssh-add -A でキーチェーンに登録してある鍵をエージェントに追加になっている。

公開鍵をサーバーに登録する

公開鍵を対象サーバーの~/.ssh/authorized_keysへ登録する。

ssh-copy-id を使用して登録

最も簡単な方法。
MacではHomebrewを使用すれば、ssh-copy-idコマンドを簡単にインストールできる。

# コマンド入れてなければ入れる。
brew install ssh-copy-id
# sshするのと同じ感覚でオプションを入れる
# -i オプションを使うと、登録する公開鍵を選べる。
ssh-copy-id hoge_user@hogehoge.hoge.com

手動で登録

手動で登録する際は少々面倒くさい。
対象サーバーのユーザーへ初めて鍵登録する際は、パーミッションの設定が必要になる。
とりあえず、フォルダとファイルを作る

# ログイン
ssh hoge_user@hogehoge.hoge.com
# フォルダとファイルを作る(既に存在している場合は実行しなくても可)
mkdir .ssh
touch .ssh/authorized_keys
# 権限の設定。個々を間違えると、公開鍵認証でログイン出来ないので注意
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

この後、公開鍵をサーバーへ持って行ってauthorized_keysへ追記する必要がある。
主に2パターン方法がある。

ワンライナーで対象サーバーのauthorized_keysへ追記する

推奨。簡単にできる。

cat ~/.ssh/id_rsa.pub | ssh hoge_user@hogehoge.hoge.com 'cat >> .ssh/authorized_keys'

scpで公開鍵を対象サーバーへ持って行ってauthorized_keysへ追記する

ちょっと面倒臭いが、初心者でも動作を追っていくことが簡単にできる。

scp ~/.ssh/id_rsa.pub hoge_user@hogehoge.hoge.com:
ssh hoge_user@hogehoge.hoge.com
# ログイン後
cat id_rsa.pub >> .ssh/authorized_keys

公開鍵認証で接続できるか確認

無事、鍵認証設定ができていれば、サーバーのパスフレーズを入力せずにログインができる。

ssh hoge_user@hogehoge.hoge.com

パスワード認証を禁止する

せっかく公開鍵認証を設定したのだから、パスフレーズ認証を禁止してしまおう。

# 対象サーバーへログインした状態
sudo vi /etc/ssh/sshd_config
# PasswordAuthentication no
# ChallengeResponseAuthentication no
# へ設定する

この後、sshdを再起動させることになるが すぐにログアウトはしないこと

# CentOS 6
sudo service sshd restart
# CentOS 7
sudo systemctl restart sshd

ログアウトせずに、 ターミナル等の別タブで開いてssh接続ができるか確認する。
無事、接続できたらログアウトして良い。
公開鍵認証設定OK!

※sshd再起動後、鍵登録が正常にできていなかった場合、サーバーへVNCできるか物理アクセスできないと 詰みます

番外編

ssh configの設定

少しだけ触れておきます。
sshで毎回

ssh hoge@hogehoge.com

とか手打ちするのは結構面倒くさい。
クライアント側で ~/.ssh/config を設定すると、

ssh hg

とかで接続できるようになる。
設定方法は

vi ~/.ssh/config
Host hg
  HostName hogehoge.com
  User hoge
  IdentityFile ~/.ssh/id_rsa

のような形式。
その他、使用する鍵ファイルの設定や多段sshの設定もできたりするので、覚えておくと吉。

※2018/10/02追記 多段sshとは
いわゆる踏み台にsshしてさらにsshすること。
localhost -> サーバーA -> サーバーB
のような接続が簡単にできるようになる。
また、サーバーAに鍵を置かないで済むようになるのでセキュア。
詳しい説明は他に譲ります。
https://qiita.com/ik-fib/items/12e4fab4478e360a82a1

なんか警告っぽいメッセージが出て接続できないんだけど

すっごく目立つ形式の警告メッセージが出てたら多分これ。
サーバーのフィンガープリントが変わってしまうと起きる。

hogehoge.com -> サーバーA
から
hogehoge.com -> サーバーB

へドメインの向き先を変えると起きる。
理由は、気付かずに異なるサーバーへ接続することを防ぐため。
~/.ssh/known_hosts に記述されているので、ssh-keygenコマンドかviを使って該当の行を削除すれば良い。

なんかめんどいと思ったら、rmで~/.ssh/known_hostsを削除しても動くが、
複数のサーバーを運用しているならやめておいたほうが良いかも。

上級者編

個人的メモかも。

sshエージェントを使用しないでsshしたい

sshdの設定変更ができたかどうか確認したい時など。

ssh -o 'IdentitiesOnly=yes' hoge.com

sshの -o オプションを使用すると、ssh_configに書いたものと同じような効果を得られる。
man ssh すればオプションが全部掲載されてるっぽい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした