伊達要一@とうきょうDD954の書棚と雑記

伊達要一の読んだ本の紹介と書評、それと雑記

【CentOS】公開鍵認証方式を用いて ssh接続をする方法

f:id:yohichidate:20141228094821p:plain
https://wiki.centos.org/ArtWork/Brand/Logo?action=AttachFile&do=get&target=centos-logo-light-vertical.svg
https://www.centos.org/

暫くぶりの更新です。実のところ結構長期間ハマっていたネタがようやく昨日になって解決しましたのでここに簡単にまとめます。
出典はこちら。
www.conoha.jp
www.conoha.jp

(前提)パスワード認証と公開鍵認証

/etc/ssh/sshd_configPasswordAuthenticationChallengeResponseAuthentication で制御している。
パスワード認証をする場合

PasswordAuthentication yes
ChallengeResponseAuthentication yes

パスワード認証を拒否して公開鍵認証をする場合

PasswordAuthentication no
ChallengeResponseAuthentication no

作業をする前にコンソール接続などでここらへんの設定を「パスワード認証をする場合」の設定に変更しておく必要がある。
なお、ConoHaの場合ウェブ経由でコンソール接続が可能。
www.conoha.jp

この変更をした後、必ず以下のコマンドを実行する必要がある。
CentOS7以降は

systemctl restart sshd.service

CentOS6以前*1

service sshd restart

(参考資料)
qiita.com

root で ssh接続する

セキュリティ的に root でのアクセスをホイホイ許可するのは一般的に非推奨。あくまでも技術的に出来るというお話として。

1. パスワード認証で ssh接続する

以下のコマンドでターミナルからアクセスする。

ssh ユーザー名@IPアドレス

パスワードを要求されるので、入力してログインする。

exit

でログアウトする。

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

既に ~/.ssh/ に作成されている場合は、ヘタに作成してはならない*2
まだ、公開鍵と秘密鍵を作成していない場合、以下のコマンドで作成する。

cd ~/.ssh
# 「~/.ssh」が存在しない場合「mkdir ~/.ssh」してから「cd ~/.ssh」
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

この後、保存場所やパスフレーズについて聞かれるが、両方とも Enter で飛ばす。一応パスフレーズに関しては使うべきというナレッジもあるが、あくまで便宜的な方法の説明なので今回は省略。
qiita.com

これで、 ~/.ssh/id_rsa秘密鍵)と id_rsa.pub (公開鍵)が作成される。

3. 公開鍵をアップロードし、ssh接続する

2. で作成した公開鍵を以下のコマンドでターミナルからサーバへアップロードする。

scp id_rsa.pub ユーザー名@IPアドレス:~/.ssh/authorized_keys

root の場合はこれで一発でアップロード出来るはず。もし ~/.ssh/ が無くてうまく行かない場合は、一度パスワード接続でログインしてからやればいい。

このあと以下のコマンドで、公開鍵認証を用いることでパスワード無しでの接続が出来るか確認する。

ssh ユーザー名@IPアドレス

パスワードが要求されずにアクセス出来れば成功。「(前提)パスワード認証と公開鍵認証」に基づいて、「パスワード認証を拒否して公開鍵認証をする」設定に変更する。

一般ユーザで ssh接続する

前提として、パスワード認証でアクセス出来るようにしておく。また、公開鍵&秘密鍵「root で ssh接続する」ですでに作成済ということで省略する。

A. 公開鍵をアップロードする

基本的に新規作成したサーバの一般ユーザの場合、~/.ssh/ が存在しないことが多いので、一度ホームディレクトリにアップロードする /.ssh/ に移動してから以下のコマンドをターミナルから実行する。

scp id_rsa.pub ユーザー名@IPアドレス:~/authorized_keys

B. /.ssh ディレクトリの作成とファイルの移動

サーバにログインして ~/.ssh/ を作成する。

mkdir .ssh

パーミッションを自分のみフルアクセス可能*3にする。

chmod 700 .ssh

~/ に保存されている authorized_keys~/.ssh/ 配下に移動する。

mv authorized_keys .ssh/authorized_keys

パーミッションを自分のみ読み書き可能*4にする。

chmod 600 .ssh/authorized_keys

これで一旦

exit

でログアウトして、再度ログインを試す。これでパスワード要求無しにログイン出来れば成功。「(前提)パスワード認証と公開鍵認証」に基づいて、「パスワード認証を拒否して公開鍵認証をする」設定に変更する。

その他のナレッジについてはこちら。
yohichidate.hatenablog.com

*1:CentOS7 においても、上述「systemctl restart sshd.service」にリダイレクトされるので使用可能ではある

*2:既存の公開鍵&秘密鍵を上書きしたりすると、他のサーバへの接続ができなくなったりして大変に面倒くさいことになる

*3:rwx --- ---/700の状態

*4:rw- --- ---/600の状態