質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Q&A

解決済

1回答

9046閲覧

公開鍵、秘密鍵の作成したときにscpする場所について

nnahito

総合スコア2004

公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

2グッド

3クリップ

投稿2016/04/28 17:58

環境

MacOSX (Yosemite 又は El capitan)

質問

例えば、公開鍵認証によるSSH接続 - Macターミナルの使い方のようなサイトさんで紹介されている、
公開鍵・秘密鍵の作成の時に、

$ scp ~/.ssh/id_rsa.pub karuma@aaa.bbb.ccc.ddd:~/.ssh/authorized_keys

のように、公開鍵をサーバに設置(コピー)と言った事をしていますが、
これは、何処のディレクトリに当たるのでしょうか?

例えば、サーバー機にする予定のMacで
$ ssh-keygen -t rsa
とした際に、.sshに鍵が作成されます。

サーバー機にする予定なので、別にその場所のままでもいい気はしますが、
scpで動かさないと認証できません……

scpした先は何処に当たるのかが分からずもやもやしています。
詳しい方がいらっしゃいましたら、ご教授の方をよろしくお願いいたします。

ikuwow, Ryo👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$ scp ~/.ssh/id_rsa.pub karuma@aaa.bbb.ccc.ddd:~/.ssh/authorized_keys

において

~/.ssh/id_rsa.pub

~/.ssh/authorized_keys

~

はログインしているユーザーのホームディレクトリを指し示すものです
したがって

$ scp ~/.ssh/id_rsa.pub karuma@aaa.bbb.ccc.ddd:~/.ssh/authorized_keys

は自分のホームディレクトリの.sshディレクトリにあるid_rsa.pubを、コピー先(aaa.bbb.ccc.ddd)のkarumaのホームディレクトリの.sshディレクトリにauthorized_keysとしてコピーするとなります

サーバー機にする予定なので、別にその場所のままでもいい気はしますが、

scpで動かさないと認証できません……

公開鍵認証における秘密鍵と公開鍵の関係を確認しておいた方がよいです

  • 秘密鍵:ログインする側(クライアント)に持つ
  • 公開鍵:ログインされる側(サーバー)に持つ

したがって普通はログインする側で鍵を生成して、ログインされる側に生成された公開鍵の方を渡す形になります
また例示されているコマンドだとauthorized_keysが上書きされてしまうので、もし既にauthorized_keysが存在していたらauthorized_keysに追記するようにしましょう
最初の設定で躓いているようなので大丈夫だと思いますが、上書きされると既に公開鍵認証できていた端末からログインできなくなります
→仕組みを理解しないでコピペで済ますと、2つめ(2台目の端末)の設定のときに焦ることになります

投稿2016/04/28 19:12

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unau

2016/04/28 22:41

dojikko さんの回答がわかりやすいので、便乗してコメントさせていただきます。 公開鍵は人 (通信相手) に渡すことが前提なのでコピーしたりしますが、秘密鍵は一切誰にも見せてはいけないので、基本的にコピーすることはありません。ある SSH サーバに二つの別のパソコンから接続する際、お手軽には一方のパソコンで鍵の対を作り、公開鍵を SSH サーバに設定し、秘密鍵を別のパソコンにもコピーしたりするかもしれませんが、それは秘密鍵をコピーしているので好ましくない運用です。そういうケースではそれぞれのパソコンでそれぞれ鍵の対を作り、それぞれの公開鍵を SSH サーバに置くほうがよいです (dojikko さんのおっしゃる「2 つめ(2 台目の端末) の設定」が必要なケース)。 余談になりますが、USBトークンなどの暗号化演算チップと鍵の格納領域がセットになったものを使った場合、鍵対を生成した本人ですら秘密鍵そのものを取り出すことができません (もちろん、公開鍵は取り出せます)。秘密鍵を使って計算する回路もトークン内に (ハードウェアとして) 組み込んでありますので、公開鍵暗号を使った通信はできます。しかし、秘密鍵をコピーする手段がありません。 という設計になっているくらい、秘密鍵はコピーするものではない、わけです。 公開鍵の置き場所はデフォルトでは ~/.ssh/authorized_keys になっていることが多いと思いますが、これは sshd (SSH サーバソフト) の設定ファイル (/etc/ssh/sshd_config などの) で変更することもできます。 私が SSH サーバを管理するときは、/etc/ssh/authorized_keys というディレクトリを作り、そこにユーザごとの公開鍵を置く設定にすることが多いです。そのほうが一つのディレクトリに公開鍵が集まり、管理しやすいからです。ユーザ数が多く、それぞれのユーザに公開鍵の管理をまかせるような場合はデフォルトの ~/.ssh/authorized_keys に置く運用のほうが向いていると思いますが。
nnahito

2016/04/29 02:52

dojikko 様 unau 様 ご回答有り難うございます。 >普通はログインする側で鍵を生成して、ログインされる側に生成された公開鍵の方を渡す形になります 知りませんでした…… 先輩の見よう見まねでやろうと思ったのですが、そもそも先輩のやり方が間違っていたのですね…… >また例示されているコマンドだとauthorized_keysが上書きされてしまうので、もし既にauthorized_keysが存在していたらauthorized_keysに追記するようにしましょう なるほど、ありがとうございます。 こちら、SCPだと上書きされていきますが、catのような追記をリモートですることは可能なのでしょうか? >それは秘密鍵をコピーしているので好ましくない運用です つまり、つなぐ台数分鍵を作っていくということなのですね
unau

2016/05/11 16:46

コメントに答えていないことに今、気づきました。 >こちら、SCPだと上書きされていきますが、catのような追記をリモートですることは可能なのでしょうか? この質問は dojikko さんへのものと思いますが、ついでに。 scp はリモートホストに ssh で接続して、接続先でコピー用のプロセスを立ち上げてファイルのやりとりをする、という仕組みです。同じように ssh 接続した経路を使ってファイルをやりとりするコマンドに sftp があります。両者のそれぞれの特徴は次のページがわかりやすいと思いますが、どちらもファイルの追記には対応していないと思います。 http://www.atmarkit.co.jp/ait/articles/0606/27/news135_2.html なので、いちばん簡単な方法は、scp でファイルをローカルに持ってきて、手元で追記し、それを scp でリモートホストの該当ファイルに上書きする、だと思います。 ローカルで ssh コマンドが利用できるのであれば、リモートホストのシェル上で実行したいコマンドを書くこともできます。scp と同じように接続先で新たなプロセスを起こすわけですが、ファイル転送以外の任意のコマンドを実行できる、という感じです。 具体的には、次のようなコマンドになります(未検証)。 [user@local]$ ssh remote.example.com "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub >つまり、つなぐ台数分鍵を作っていくということなのですね 「つなぐ台数分」という表現だとあいまいですが、「秘密鍵はコピーするもんじゃない」逆に「公開鍵はコピーしてもよい」という原則を考えていただければよいかと思います。 ssh サーバに接続するユーザの立場から見て、ssh サーバ A と ssh サーバ B のどちらも使う、という場合、同じ鍵対を使って構いません (それぞれように鍵対を作ってもよい)。言い方を替えると、一回鍵対を作り、できた公開鍵をサーバ A の管理者にも渡し、サーバ B の管理者にも渡し、というのでよい、ということです。 一方で、同じサーバ A に接続するのに、デスクトップ PC からつなぐこともノート PC からつなぐこともある、という場合は、デスクトップ PC でも鍵対を作り、ノート PC でも鍵対を作り、それぞれの公開鍵をサーバ A の管理者に渡します。もしくは、USB フラッシュメモリ内に鍵対を作り、サーバ A に接続するときは利用するパソコンにその USB フラッシュメモリを挿して使います。 以下、Windows での話ですが。 私は PortableApps という USB メモリにアプリをインストールして使うソフトを使い、PuTTY Portable という ssh クライアントソフトと各サーバに接続する鍵対を一つの USB メモリに入れて移動するときにはそれを持ち歩く、という運用をずっとやっていました。最近は ssh クライアントとしては RLogin を使うようになり、PortableApps は使わなくなりましたが、秘密鍵は依然として USB メモリに入れて持ち運ぶ運用をしています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問