gitなどの前提接続方式としてSSHが利用されるシーンは増えています。
エンジニアであればSSH設定を理解している人は多いと思いますが、ふだんGUIツール主体の利用者であるデザイナー/Webコーダーがターミナル上のコマンドで設定することにはやや難があります。
ここではFinderを併用して作業の意味を理解しながら進められるSSH設定手順をまとめました。
Source Tree / Macの秘密鍵指定にもSSHの設定が必要
gitのGUIツール「Source Tree」にはWindows版とMax版があり、機能が異なっています。MacOSX版のSource TreeにはSSHの秘密鍵を登録する機能がありません(ver. 2.3時点)。
しかしSource Treeは、LinuxやOSXなどの標準的なSSH設定と互換性があり、あらかじめSSHアクセスのセットアップを完了しておけば、実は秘密鍵を利用した接続も可能です。
また、このSSHの設定では、ポート番号も指定できるため、標準的なポート番号(22番)以外のgitリポジトリにもアクセスできます。
SSH設定の構造
SSHの標準的な設定は、 ~/.ssh というディレクトリにまとまっています。
- /Users/some_user
- .ssh
- config
- some_private_key
- .ssh
~/はホームディレクトリです。OSXでは /Users/some_user のフォルダ、Linuxなどでは /home/some_user のディレクトリです。
このディレクトリにSSH鍵とconfig
という名前の設定ファイルを置きます。
接続先が複数になる場合は、configファイルに複数サーバーの設定を追記していきます。また、接続先ごとに鍵ファイルが異なる場合は、それぞれのファイルを~/.ssh/に置いておきます。
また、鍵のファイル名はconfigファイルから参照するだけなので、名前に制約はありません(ファイル中に記載されている文字列が照合できれば認証はパスします)。
パーミッション設定が必要
SSHの秘密鍵などは流出すると他者に侵入されてしまうため、セキュリティのため ~/.ssh/ 内のファイルには初期値よりも堅めのパーミッション(アクセス権限)を設定する必要があります。
パーミッションが適切に設定されていないと実際にアクセスしようとした際にsshコマンド類がエラー終了します。
パーミッション設定は、後述の手順解説の中でchmod
コマンドで実行しているものです。
.sshフォルダの確認
configファイルや秘密鍵のファイルは実際には単なるテキストファイルであるため、.ssh/フォルダをFinderで開いてしまえば、一般的なファイル操作で作業できます。
ドットから始まるディレクトリはOSXでは隠しフォルダになっているため通常非表示となっていてアクセスできませんが、ターミナルで移動してからopenコマンドを使うと内容をFinderで表示できます。
まず、ターミナルを起動するとホームディレクトリにいる状態になるため、.sshディレクトリに移動してみることで存在確認できます。
cd .ssh
ここで-bash: cd: .ssh: No such file or directory
というエラーが表示された場合は、.sshディレクトリがまだないので作成します。また、このタイミングでパーミッションも設定しておきます。
mkdir .ssh
chmod 700 .ssh
.sshディレクトリにcd
できたら、Finderを開きます。
open .
秘密鍵の設置&パーミッション設定
Finderが開けばドラッグ&ドロップでファイル移動できるため、このフォルダに秘密鍵を置きます。
また、秘密鍵もパーミッションを変更する必要があります(ターミナルで以下のようなコマンドを実行します)。
chmod 600 some_private_key
configファイル編集
SSHの設定ファイルはconfigという名前(拡張子ナシ)のテキストファイルを作成して.sshディレクトリに置きます。
任意のテキストエディタで作成・編集できます(パーミッションもデフォルトの644で動作するためchmodはとくに必要ありません)。
configファイルの主な項目の意味は下記のとおりです。
- Host
- sshやgitコマンド、SourceTreeから参照するラベル(設定名)です。わかりやすい任意の名前をつけます
- HostName
- 接続先のサーバです。ドメイン名またはIPアドレスで指定します
- User
- 接続時のユーザー名です
- Port
- 接続先のポート番号です。標準的な22番以外のポートで動作するサーバーに接続する際に必要です
- IdentityFile
- 秘密鍵ファイルのパスです。~/.ssh/ ディレクトリに置いたので
~/.ssh/some_private_key
という形式で指定します(some_private_keyがファイル名)
- 秘密鍵ファイルのパスです。~/.ssh/ ディレクトリに置いたので
複数の接続先を指定する場合は、このブロックを単純に羅列していきます。
SSHを利用する
以上の設定を完了すると、sshやgitコマンドの利用時に接続先としてconfigに記述したHostの名前を利用できます。
たとえば、以下のような設定例ではssh dev_server
を実行すると、example.comの200番ポートにgitユーザーでアクセスして、private_rsaファイルで認証します。
Host dev_server
HostName example.com
User git
Port 200
IdentiryFile ~/.ssh/private_rsa
また、SourceTree(Mac版)も「新規リポジトリ」→「URLからクローン」→「ソースURL」の接続先に dev_server:some_repository
のような形式でHost設定を利用できます。
これによりSourceTreeを利用したアクセスの際にも、秘密鍵やポート番号を指定できます。
補足:ファイルのパーミッションについて
chmodコマンドで指定したファイルパーミッションの600などのモードは、Finderからも確認設定できます。
ファイルを右クリック→「情報を見る」のポップアップダイアログの一番下「共有とアクセス権」欄に通常は折りたたみ表示されています。
“600”は、自分が「読み/書き」かつeveryoneが「アクセス不可」という設定で、1台のPCを共同利用している場合などに備えて他のユーザーからはアクセスできない設定にしているものです。
ファイル権限はこの「情報を見る」ダイアログでも変更可能です。
パーミッションやchmodについては WikipediaほかUnixの標準的なchmodコマンド解説を参考にできます。
Chuma Takahiro