リンク

id_dsa

(2017/02/20)

公開鍵認証でホストにSSH接続しようとすると、以下のメッセージが出た。

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

"-v" を付けてやり直したところ、こんな行が含まれていた。

debug1: Skipping ssh-dss key /Users/bear/.ssh/id_dsa - not in PubkeyAcceptedKeyTypes

dsa は(暗号化方式として弱いから)受け入れてくれなくなったということらしい。

解決策は .ssh/config に、DSAを受け入れるように書く方法もあるが、それだと弱い暗号を使い続ける状況は変わらないため、RSA 鍵を作る。環境によってはその他のもっと強い暗号方式でも良い。

sshkeygen -t rsa -b 4096

ファイルの暗号化と復号(公開鍵利用の場合)

最初に秘密鍵/公開鍵ペアを作成

[秘密鍵生成]
openssl genrsa -des3 -out secret.pem
(パスフレーズ設定を求められる)
[公開鍵生成]
openssl rsa -pubout -in secret.pem -out public.pem

次に、ファイルを暗号化。 平文ファイル plain.txt を暗号化して、encrypted.file を作る。

openssl rsautl -encrypt -pubin -inkey secret.pem -in plain.txt -out encrypted.file

これを復号するには、

openssl rsautl -decrypt -inkey secret.pem -in encrypted.file
(秘密鍵のパスフレーズを聞かれる)

とする。

OpenSSL は Windows 版バイナリも配布されているので、いずれでも使えて便利ですね。

OpenSSLのインストール

tar xfz openssl-1.0.0e.tar.gz
cd openssl-1.0.0e
./config shared --prefix=/usr/local --openssldir=/usr/local/openssl
make
make test
make install

バージョン確認

% openssl version
OpenSSL 1.0.0e 6 Sep 2011

OpenSSHのインストール

tar xfz openssh-5.9p1.tar.gz
cd openssh-5.9p1
./configure --without-pam --with-zlib=/usr/local
make

opensslが/usr/local/ssl/配下にインストールされている場合は、下記のようなメッセージが表示されることがある

checking OpenSSL header version... 90804f (OpenSSL 0.9.8d 28 Sep 2006)
checking OpenSSL library version... 90704f (OpenSSL 0.9.7d 17 Mar 2004)
checking whether OpenSSL's headers match the library... no
configure: error: Your OpenSSL headers do not match your library.
Check config.log for details.
Also see contrib/findssl.sh for help identifying header/library mismatches.

原因はその通りなので、configureのオプションを指定してあげれば良い

./configure --without-pam --with-zlib=/usr/local --with-ssl-dir=/usr/local/openssl

さて。sshdのサービスが動いているなら停止させてから、install

make install

バージョンの確認

root # ssh -V
OpenSSH_5.9p2, OpenSSL 1.0.0e 6 Sep 2011
 (5.9p1 をインストールすると p2 が出る)

バージョンが古いのが出るときは、 which sshとして、/usr/bin/sshになってないか確認。 たとえば、こんなふうにする。

cd /usr/bin
ls ssh*
  --> 5つくらいssh関連コマンドが出る
rm ssh*
ln -s /usr/local/bin/ssh* .

こんな感じ。

また、OpenSSHのバージョンは上がっているのに、OpenSSLが古いものになっている場合も、同様に古いOpenSSLライブラリが呼ばれてるので、同じような処理をする。

OpenSSL の make install でこける

 make install 中に、下記のエラーを吐いてこけた。

cp: fipscanister.o.sha1: No such file or directory
cp: fipscanister.o: No such file or directory
*** Error code 1

Stop in /usr/local/src/openssl-0.9.8j/fips.
*** Error code 1

Stop in /usr/local/src/openssl-0.9.8j.

 初めてのケース。  原因はよくわからない。困った。

 【追記】  OpenSSL 0.9.8k では通った。意味不明。

OpenSSH configure 時のオプションで…

./configure --with-ssl-dir=/usr/local/openssl

として実行すると、

checking OpenSSL header version... 1000005f (OpenSSL 1.0.0e 6 Sep 2011)
checking OpenSSL library version... 9080ef (OpenSSL 0.9.8n 24 Mar 2010)
checking whether OpenSSL's headers match the library... no
configure: error: Your OpenSSL headers do not match your
library. Check config.log for details.
If you are sure your installation is consistent, you can disable the check
by running "./configure --without-openssl-header-check".
Also see contrib/findssl.sh for help identifying header/library mismatches.

となって、止まる。どこかに 0.9.8n のライブラリの残骸があるのかもしれないが、これまた見つけられない。

で、

./configure --without-pam --with-zlib=/usr/local --with-ssl-dir=/usr/local/openssl

とすると、

checking OpenSSL header version... 1000005f (OpenSSL 1.0.0e 6 Sep 2011)
checking OpenSSL library version... 1000005f (OpenSSL 1.0.0e 6 Sep 2011)

通る。 --without-pam だけ付けても通らなかったが、--with-zlib=/usr/local を付けたら通った。

理由は不明。

暗号化されていない秘密鍵の取り出し

通常、秘密鍵はこんな感じになっている

-----BEGIN DSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,B166280A577EB4F7
...

2行目にあるとおり、これは encrypted 。

特にコレを意識したことはなかったんだけど、秘密鍵を必要とする機器にこの鍵を登録しようとしたところ「暗号化されているのでダメ」と言われてしまった。

これを復号する方法は次のとおり

openssl dsa -in id_dsa

id_dsa は秘密鍵ファイル。

テキストファイル key.txt に出力したい場合は、

openssl dsa -in id_dsa -out key.txt

とする。

いずれの場合もパスフレーズの入力を求められる。 機器が登録を求めていたのは「パスフレーズのかかっていないもの」だったということですかね。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS