GitHubやBitbucketなどのホスティングサービスと安全な接続をするためにSSHキーを作ります。
その作り方を各OSごとに説明します。といってもやり方によってはぜんぶ同じになるので、こっちのほうが覚えることがひとつで楽。
OpenSSHを使います。
シェルのコマンドを使う
Linuxのシェルにはssh-keygenコマンドがあります。これを使うと数秒で秘密鍵と公開鍵が作成できます。
(ssh-keygenはLinux系OSやMacOSに標準で入っている。)
またWindowsでも、GitをインストールするときにGit bashプロンプトをインストールすればssh-keygenコマンドが使えます。
SSHキーを作成する人でGitをインストールしない人は少ないでしょう。Gitは必須のソフトウェアになっているので、入れておいて損はありません。
Windowsで基本的なLinuxコマンドを使うために、Gitをインストールするというイレギュラーな使い方をしてもいいです。
今回はssh-keygenコマンドを使ってSSHキーを作成します。
ssh-keygenコマンドでキーをつくる
まずはプロンプトでコマンドを実行します。
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/***/.ssh/id_rsa):
最初に作成するSSHキーの名前の入力を求められます。
ファイルの絶対パスを入力してEnterキーを押します。何も入力せずにEnterキーを押すとデフォルト設定です。
デフォルト
ログインユーザのホームディレクトリ/.ssh/id_rsa
次にSSHキーのパスフレーズの入力を求められます。
Enter passphrase (empty for no passphrase):
パスフレーズはパスワードのことで、SSH接続で使うパスワードを入力します。
入力したらEnterキーを押します。パスワードがいらないときはそのままEnterキーを押します。
キーを複数人で共有する、複数の場所で使いまわすときはパスワードが必要です。
しかし、キーを使いまわすこと自体、セキュリティ上問題があるので、このような使い方はあまりしません。
公開鍵をひとつのことにしか使わないのであれば、パスワードは不要です。
とくに、プログラムでSSHの自動接続をするときやGithubやBitbucketなどのホスティングサービスで、アクセスするたびにパスワード入力を求められるのはうっとうしいです。
ぼくはどちらかと言えばパスフレーズ不要派です。(あくまでケースバイケース)
Enter same passphrase again:
パスワードの確認を求められます。(パスワードが不要なときはそのままEnter)
Your identification has been saved in /home/***/***/id_rsa.
Your public key has been saved in /home/***/***/id_rsa.pub.
The key fingerprint is:
SHA256:wuf3jKWtG04vOZHFfGM97VOKfR+Ov51Gz3r6HCx9LGw kusanagi@kusanagi71
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| o ..|
| . + +.+|
| o S o = +o|
| + o ..==o|
| . +o..E*B|
| ++X o.=X|
| *== =O=|
+----[SHA256]-----+
こんな感じの結果が表示されれば秘密鍵・公開鍵のペアがひとつ作られます。
ls -ltr
-rw-r--r-- 1 *** *** 401 2月 8 16:01 id_rsa.pub
-rw------- 1 *** *** 1679 2月 8 16:01 id_rsa
.pubがついているものが公開鍵、もう一方が秘密鍵です。
秘密鍵は作成した端末に保管して、絶対に外に公開しません。外に出すのは公開鍵だけです。
秘密鍵の受け渡しをすることもありますが、おすすめしません。
転送中に盗まれてしまったら、かんたんにアクセスされてしまうからです。
Windowsでssh-keygenコマンドを使う
Windowsでssh-keygenコマンドを使う一番のかんたんな方法は、Gitをインストールすることです。
だいたいSSHキーを作成するときはGitが必要なことが多いので、ついでにやってしまった方がいいです。
まずは、GitをWindowsにインストールします。
右クリックのコンテキストメニューに『Git Bash Here』が追加されます。
これを開くと、bashコマンドが使えるコマンドプロンプトが起動します。ここでssh-keygenコマンドが実行できます。
C:\Program Files\Git\usr\binにssh-keygen.exeがある。
WindowsでのSSHキーのデフォルトの作成ファイルは
ユーザーフォルダ¥.ssh¥id_rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/***/.ssh/id_rsa):
実行したssh-keygenコマンドは、すべてのオプションを省略しています。じっさいはこんな感じで使います。
ssh-keygen -t rsa -b 2048 -C "sample@sample.com"
-t | 鍵タイプ。 デフォルト: rsa |
-b | 鍵の長さ。 デフォルト: 2048byte 長い方が暗号の強度が強い。ただし2048が弱いというわけではない。 |
-C | コメント。 デフォルト: ユーザ名+@+マシン名(PC名) 公開鍵の一番最後に追加される。メールアドレスを入力することが多い。 |
OpenSSHとPutty
ここまで説明してきたものはOpenSSHという規格でLinuxOSで採用されています。それに対してPutty形式もあります。
Puttyはもともとリモート操作クライアントのアプリケーションのことで、ssh通信も対応しています。
Puttyには.ppk拡張子の秘密鍵がありOpenSSHと互換性がありますが、.ppkファイルはすべてのssh接続で使えるわけではありません。
たとえばGitHubやBitbucketのSSH接続ではOpenSSHを使います。しかし、リモート操作のアプリケーションなどでは、.ppkファイルを使うのもあります。
PuttyもそうですがWinSCPやTeraTermなどもそう。.ppkファイルの作成方法は別の機会に行います。
まとめ
今回は、ssh-keygenコマンドを使ってSSHキーを作成する方法をご紹介しました。
Windowsには、PuTTYgenというキー作成アプリケーションがあります。これを使った方法を紹介したものもたくさんあります。
でもぼくは、OSに関係なく共通で使える方法があるならそれが一番いいと思っています。同じ目的のためにいくつもの方法を覚えるのがめんどうだから。
(たくさん覚えられない能力も関係しているが...)
たくさんのことを覚えるのが苦手という人におすすめの方法です。