2012/08/18

Mac から Ubuntu へ ssh するのに手こずりました

毎回、パスワードを打つのが面倒くさかったので、公開鍵暗号方式で認証しようとしたところ なかなかに時間を食われたのでまとめておこうと思います。
opensshはubuntuですのでインストールの時に突っ込んでおきます。
ないならapt-getあたりでhogehoge

sshはVersion 2で暗号方式はrsaを使います。
以下がサーバのsshデーモンの設定
一応、初期ファイルをバックアップしておいたほうがいいかもしれません。

# /etc/ssh/sshd_config
# ssh2を使用

# 使用するポート
Port 74

# 使用するsshバージョン
Protocol 2

# HostKeys for protocol version 2(秘密鍵ファイル)
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

# 特権分離の使用可否
# yesだとプロセスは非rootユーザ(デフォルトは sshd ユーザ)権限で動作する
UsePrivilegeSeparation yes

# Loggingする時のファシリティコード
SyslogFacility AUTH

LogLevel INFO

# ログインする制限時間
LoginGraceTime 120

# rootログインの可否
PermitRootLogin no

# パーミッションなども確認する
StrictModes yes

# 公開鍵暗号方式を使って認証する
PubkeyAuthentication yes

# 公開鍵ファイルを設定
AuthorizedKeysFile %h/.ssh/authorized_keys

# ~/.rhosts and ~/.shosts ファイルを読み込まない
IgnoreRhosts yes

# similar for protocol version 2
HostbasedAuthentication no

# ~/.ssh/known_hosts ファイル(ユーザごとのホスト鍵リスト)を無視するか否か
IgnoreUserKnownHosts no

# パスワード認証可否
PasswordAuthentication no

# 空のパスワードを許可するか否か
PermitEmptyPasswords no

# チャレンジレスポンス認証可否
ChallengeResponseAuthentication no

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM no


次に秘密鍵と公開鍵の生成と設定です。
これが一番手間取りました。
ぐぐると結構出てくるんですが、やり方がだいたい2通りくらいあるようで、ちょっと混乱しがちです。

基本的にクライアント(Mac)が主体の操作です。
バージョン2なので以下のように鍵を生成します。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hoge/.ssh/id_rsa):  #ここで何も入力しないこと! 
Enter passphrase (empty for no passphrase):  #適当なパスフレーズ
Enter same passphrase again: 
Your identification has been saved in /Users/hoge/.ssh/id_rsa.
Your public key has been saved in /Users/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
e3:29:2d:gb:4d:f2:12:c2:23:57:a4:6a:1b:4f:20:75 hoge@hoge.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                .|
|              .oE|
|             ....|
|        S   ... .|
|       + +  ..+..|
|      . = ...+ +.|
|       . . =o =. |
|          . o+ ..|
+-----------------+


ここで大事なのは鍵の名前を付けないでそのままというところです。
わかりやすい名前をつけていたせいで、だいぶ手こずりました_:(´ཀ`」 ∠):_

$ man sshをしてみると
-i identity_file
    Selects a file from which the identity (private key) for RSA or DSA authentication is read.
    The default is ~/.ssh/identity for protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for protocol version 2.
と-iオプションの部分に書いてありました。
つまり、秘密鍵はバージョン2を使うなら~/.ssh/id_rsaにしろということ
default値なのでconfigで変えられるのかな?
 

次にクライアントからサーバ(Ubuntu)へ共有鍵(id_rsa.pub)を設定します。
場所は設定ファイルのAuthorizedKeysFileで指定したものなので,

%h/.ssh/authorized_keysです。
何かしらを使ってサーバに共有鍵をコピーし、authorized_keysに追記してください。
authorized_keysのパーミッションは644です。

.sshディレクトリ(700)や、ファイルのパーミッションでうまくいかない時もあるようなので注意が必要です。

これで設定は済んだはずなのでサーバのsshデーモンを再起動させます。

$ sudo service ssh restart

余談ですが、以前は
$ sudo /etc/init.d/ssh restart
としていましたが、少し前のバージョンから上記の方が推奨になっていました。
今のところはどちらも同じ動きをするようです。

あとは、普通にクライアントからsshするだけ

$ ssh USER@SERVER


以下を参考にしました。
sshd の設定(sshd_config)
http://www.nina.jp/server/slackware/openssh/sshd_config.html

2 件のコメント: