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

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

ただいまの
回答率

90.48%

  • SSH

    572questions

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

  • 公開鍵認証

    26questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 3,247

nnahito

score 1737

 環境

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+4

$ 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/29 07: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 に置く運用のほうが向いていると思いますが。

    キャンセル

  • 2016/04/29 11:52

    dojikko 様
    unau 様

    ご回答有り難うございます。

    >普通はログインする側で鍵を生成して、ログインされる側に生成された公開鍵の方を渡す形になります
    知りませんでした……
    先輩の見よう見まねでやろうと思ったのですが、そもそも先輩のやり方が間違っていたのですね……

    >また例示されているコマンドだとauthorized_keysが上書きされてしまうので、もし既にauthorized_keysが存在していたらauthorized_keysに追記するようにしましょう
    なるほど、ありがとうございます。
    こちら、SCPだと上書きされていきますが、catのような追記をリモートですることは可能なのでしょうか?


    >それは秘密鍵をコピーしているので好ましくない運用です
    つまり、つなぐ台数分鍵を作っていくということなのですね

    キャンセル

  • 2016/05/12 01: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 メモリに入れて持ち運ぶ運用をしています。

    キャンセル

関連した質問

同じタグがついた質問を見る

  • SSH

    572questions

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

  • 公開鍵認証

    26questions

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