• 224
    いいね
  • 3
    コメント

ssh 公開鍵認証設定まとめ

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

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

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

デフォルトの設定では、

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

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

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

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

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

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

公開鍵を対象サーバーの~/.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

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

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

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

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 すればオプションが全部掲載されてるっぽい。