公開鍵の生成について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2019-6-14 12:13 | 最終変更
fujii0401  一人前   投稿数: 23
公開鍵の生成について質問があります

例えばバッシュファイルについて他のサーバーにファイルをSCPコマンドを使ってコピーするようなスクリプトをつくったとします
そして定期的に動かすためにcrontabで処理を登録しました


しかし公開鍵が必要となるのでこのままではファイアウォールにはじかれるそこで新たに公開鍵を作りその公開鍵をサーバー側に登録しました

公開鍵を作成しようと打ったコマンドは

「 ssh-keygen 」ですオプション等は使用していません

そして
command = scp -t ・・・・という

コマンドをサーバーの公開鍵に追加して登録しましたがうまくいきませんでした


つまり何がしたかったかというと
sshで指定したコマンドしか実行できない公開鍵を作ろうとして

command="実行させたいコマンド"

をサーバー側の公開鍵に追加したのですが
うまくいきません


ネットで調べたところ
公開鍵を作るときに

ssh-keygen -t rsa

とオプションを加える必要があるみたいです
確かにうまくいきました

これらの設定で定期的なジョブであるceontabにどう影響を当てえているのかよくわかりません
きちんと公開鍵とコマンドが連携できているのでしょうか?

なぜ自動認証用の公開鍵にcommmandと打つのではうまくいかないのか
よくわかりません
どなたか教えてください
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-6-14 17:36
xsdy0901  常連   投稿数: 20
まず、状況を確認させてください。

多分に想像を含むのですが、
1) ssh-keygen をオプション無しで実行し、公開鍵/秘密鍵のペアを作成

[サーバ側]
2) 公開鍵をサーバ上の適切なディレクトリに配置
3) 用途を scp を通じたファイル受信に制限するために、公開鍵の先頭に
   command="scp -t <保存先ディレクトリパス>" を追加

[クライアント側]
4) 秘密鍵を適切なディレクトリに配置
5) サーバに scp でファイル送信を行うBASHスクリプトを準備
6) BASHスクリプトを cron に登録して定期実行させてみたが、動作しなかった

1) において ssh-keygen -t rsa と鍵形式を明示指定した形で鍵ペアを作りなおし、
同様の手順をやりなおしたところうまくいくようになった

ということでしょうか。。。?
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-6-14 17:57 | 最終変更
xsdy0901  常連   投稿数: 20
もし仮に、ssh-keygen において "-t rsa" を指定する/しないことが
原因であるならば、素直に考えて、出力される鍵フォーマットが
オプションの有無によって異なっているのではないでしょうか。

原因を探るために、下記確認をお願いします
・クライアント / サーバの OS およびバージョン (CentOS 7.2 等)
・man ssh-keygen を確認 → "-t rsa" を指定しない際のデフォルト鍵形式は何か
・実際に "-t rsa" を指定した/しなかった 鍵同士を cat や less で覗いてみて、
  明らかなフォーマットの違いがないかどうか
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-6-18 13:33
fujii0401  一人前   投稿数: 23
はい
その通りです
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-6-18 13:54
fujii0401  一人前   投稿数: 23
クライアント/サーバー両社とも:centos7.0 x86_64です


"-t rsa" を指定しない際のデフォルト鍵形式を作るにあたり
指定がないものはプロトコルのバージョンの1
指定がるものはプロトコルのバージョンの2
で作成するという説明がマニュアルにありました




実際に -t rsa を指定したものとそうでないものの公開鍵を見たところ二つとも ssh-rsa という接頭語がついているのでタイプはrsaだと思います
明らかなフォーマットの違いがあるようには思えません

ただし秘密鍵を見たところ
"-t rsa"の指定をしたものを確認すると

"proc-Type:4,ENCRYOTED
DEK-INfo"

という表記があり

"-t rsa"の指定がないものを確認すると
その表記がなかったです
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-6-19 12:08 | 最終変更
xsdy0901  常連   投稿数: 20
引用:
"proc-Type:4,ENCRYOTED
DEK-INfo"
ENCRYPTEDのことだと思いますが、この場合は秘密鍵にパスフレーズが設定されているということになります。

・「-t rsa を指定する/しない いずれの場合も、パスフレーズは設定しており、その他はデフォルト」
という理解でよろしいでしょうか。

・その上で、秘密鍵のフォーマットは下記のようになっている様子でしょうか。

# -t rsa 指定なし / パスフレーズ設定
※↓ここの文字列をよく確認してください
-----BEGIN OPENSSH PRIVATE KEY-----
…
-----END OPENSSH PRIVATE KEY-----
↑OpenSSH形式

# -t rsa 指定あり / パスフレーズ設定
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC, ...
…
-----END RSA PRIVATE KEY-----
↑PEM形式

私の環境 (OpenSSH_8.0p1, OpenSSL 1.1.1b) では、
-t rsa はつけてもつけなくても共に上の "OpenSSH形式" が出力され、
-m PEM オプションを追加したときだけ下の "PEM形式" で出力されます。
(OpenSSH 7.8 からデフォルトの動作仕様が変更になっています)

かなり環境に違いがありそうですので、追加で
 $ ssh -V
 $ openssl version
の確認もお願いします。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-6-20 11:24
fujii0401  一人前   投稿数: 23
「-t rsa を指定する/しない いずれの場合も、パスフレーズは設定しており、その他はデフォルト」

すいません一度
パスフレーズの有で行っていたものを消したので

-t rsa を指定していないものはパスフレーズを指定し
-t rsa を指定したものはパスフレーズを指定していません


改めて
秘密鍵のフォーマットを確認すると


「-t rsa 指定なし / パスフレーズ設定」 の場合

秘密鍵を確認すると

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC, ...

-----END RSA PRIVATE KEY-----


の表記でした


一方
「-t rsa を追加しパスフレーズを設定した」

秘密鍵のフォーマットは


-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC, ...

-----END RSA PRIVATE KEY-----

つまり変わらなかったです



$ssh -V

を実行しましたところ以下のように表示されました

OoenSSH_6.4p1, OpenSSL 1.0.1e-fips 11 feb 2013


$openssl | version

を実行すると以下のように表示されました

OpenSSL 1.0.1e-fips 11 feb 2013
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-6-20 13:28
xsdy0901  常連   投稿数: 20
引用:
$ssh -V
を実行しましたところ以下のように表示されました
OoenSSH_6.4p1, OpenSSL 1.0.1e-fips 11 feb 2013

ありがとうございます。かなり昔のバージョンですね。
https://ftp.riken.jp/pub/OpenBSD/OpenSSH/portable/openssh-6.4p1.tar.gz
からOpenSSH_6.4p1 パッケージをダウンロードし、ssh-keygen.1 を確認してみました。

DESCRIPTION
  ssh-keygen can create RSA keys for use by SSH protocol version 1 and DSA, 
  ECDSA or RSA keys for use by SSH prtocol version 2.

  The type of key to be generated is specified with the -t option.

  If invoked without any arguments, ssh-keygen will generate an RSA key 
  for use in SSH protocol 2 connections.
-t type
  Specifies the type of key to create.

  The possible values are“rsa1” for protocol version 1
  and “dsa”, “ecdsa” or “rsa” for protocol version 2.

以上より、-t rsa を指定する/指定しない にかかわらず SSH protocol version 2 用のRSA鍵が生成されるようですので、man を見る限りでは "-t rsa" の有無によって動作が変わるとは少し考えにくいです。

もし仮に「"-t rsa1" を指定して作成した鍵で成功した」ということでしたら、単純にSSHサーバ側が SSH protocol version 1 にしか対応していないため、と結論づけることができたのですが…。

ただ、引用:
"-t rsa" を指定しない際のデフォルト鍵形式を作るにあたり
指定がないものはプロトコルのバージョンの1
指定がるものはプロトコルのバージョンの2
で作成するという説明がマニュアルにありました
と伺っていましたので、もしこの内容に間違いが無いのであれば話は反対で

「SSHサーバ側が SSH protocol version 2 にしか対応しておらず、ssh-keygen デフォルトでは version 1 が生成されるため」と結論づけることができます。

ですので、まずは上記記載のあるマニュアルの該当箇所を再度ご確認頂き、可能であればこちらに貼り付けてください。

またもう一度、改めてすべての条件を丁寧に検証してみることをお勧めします。
1 BASHスクりプト単体で実行
  1-1: デフォルト
  1-2: -t rsa  指定
  1-3: -t rsa1 指定
 
2 上記をCRON経由で実行
  2-1: デフォルト
  2-2: -t rsa  指定
  2-3: -t rsa1 指定
この6パターンですね。

他にも確認すべき点はたくさんありますが、まずは上記のとおり、マニュアルと実験結果の確認からでしょうかね。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.