はじめに
先日PCを買い替えたのですが、諸事情で旧PCで設定していたSSH鍵を引き続き使う必要がありました。
かなり試行錯誤したので、次回以降のためにまとめたいと思います。
手順
- 新PCで.sshディレクトリを作成する
- 旧PCからSSH秘密鍵とSSH公開鍵をコピーする
- 新PCの.sshディレクトリにコピーした鍵を保存する
- パーミッションを設定する
以下、手順の詳細を記載します。
1. 新PCで.sshディレクトリを作成する
sshの情報を置くディレクトリとして、.sshディレクトリ
をターミナルから作成します。
ターミナルを起動して、下記コマンドを入力してディレクトリを作成してください。
$ mkdir ~/.ssh
2. 旧PCからSSH秘密鍵とSSH公開鍵をコピーする
旧PCに保存しているSSH秘密鍵とSSH公開鍵をコピーします。
ターミナルの操作(CUI操作)でもできるのかもしれませんが、私はCUI操作が苦手なのでFinderからマウスを操作して(GUI操作)でUSBなどの外部ファイルにコピーしました。
Finderで
.sshディレクトリ
など隠しファイルを見る方法
Finderを選択した状態でcommand(⌘)
とShift(⇧)
とドット(.)
を同時に押してください。
隠しファイルが表示されます。
.sshディレクトリ
はFinderのユーザーディレクトリの中にあります。
3. 新PCの.sshディレクトリにコピーした鍵を保存する
外部ファイルに保存したSSH秘密鍵とSSH公開鍵を新PCの.sshディレクトリ
に保存します。
私はこちらもGUI操作で行いました。
4. パーミッションを設定する
このままgitなどでSSH鍵を使おうとすると、下記のような忠告文がターミナル上で表示されます。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/Users/{ユーザー名}/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /Users/{ユーザー名}/.ssh/id_rsa
Permission denied (publickey).
要は「id_rsa
がオープンすぎて、秘密鍵になってないよ」って警告しているわけです。
そこでid_rsa
のパーミッションを変更します。
まずはターミナルでls -l ~/.ssh
とコマンドを入力して、パーミッション状況を確認。
恐らく下記のようなものが出力されます。
$ ls -l ~/.ssh
total 48
-rw-r--r-- 1 {ユーザー名} staff 2622 6 7 20:38 id_rsa
-rw-r--r-- 1 {ユーザー名} staff 586 6 7 20:38 id_rsa.pub
-rw-r--r-- 1 {ユーザー名} staff 606 6 7 21:11 known_hosts
id_rsa
のパーミッションが、
- 所有者:読み出し(r)、書き込み(w)可能
- グループ:読み出し(r)可能
- 他人:読み出し(r)可能
となっていることが分かりますね。
これを「所有者のみ操作可能」へとパーミッションを変更していきます。
パーミッションを変更するために、下記のコマンドを入力してください。
$ chmod 600 ~/.ssh/id_rsa
そして先ほどと同じようにls -l ~/.ssh
とコマンドを入力して、パーミッション状況を確認します。
$ ls -l ~/.ssh
total 48
-rw------- 1 {ユーザー名} staff 2622 6 7 20:38 id_rsa
-rw-r--r-- 1 {ユーザー名} staff 586 6 7 20:38 id_rsa.pub
-rw-r--r-- 1 {ユーザー名} staff 606 6 7 21:11 known_hosts
無事にid_rsa
のパーミッションを変更できていますね。
この状態でなら、gitなどでSSH鍵を使おうとしても先ほどのような警告が出ることなく、普段通りに使用できるようになっていると思います。
以上です。 最後までお読みいただき、ありがとうございました。