SSHのconfigファイルを編集する方法について調べてみた
実装する前に。
問題
GitHubアカウント登録した後のSSH設定を全自動化したい。
SSH鍵生成
ssh-keygenコマンド
http://monsat.hatenablog.com/entry/generating-ssh-keys-for-github
ssh-keygen自動化スクリプト - mk_1211の日記
SSH鍵を生成するコマンド。CUI対話があって自動化できない。
http://qiita.com/suthio/items/2760e4cff0e185fe2db9
暗号強度も指定する。
ssh-keygen -t rsa -b 4096 -P "" -C "your_email@example.com" -f "{秘密鍵ファイルパス}"
CUI対話なしで実行できる。
- 暗号方式は
rsa
- 暗号強度は
4096
(2048以上推奨らしい) - パスフレーズなし
- メールアドレスをコメントとして入力する
{秘密鍵ファイルパス}
は任意。例えばrsa_4096_{username}
のようにする
ファイルが2つ生成される。
ファイル名 | 説明 |
---|---|
{秘密鍵ファイルパス} | 秘密鍵ファイル |
{秘密鍵ファイルパス}.pub | 公開鍵ファイル |
SSH設定
configファイルが曲者。
config
SSHを使うための設定ファイル。
設定内容
~/.ssh/config
ファイル
Host github.com.{user} User git Port 22 HostName github.com IdentityFile {秘密鍵ファイルパス} TCPKeepAlive yes IdentitiesOnly yes
Hostの値はSSH鍵を指定するキーワードになる。任意の値を付与できる。識別しやすくするため、GitHubで使うキーの場合はgithub.com.
ではじめて末尾にユーザ名をつけて使い分けるようにする。
paramikoでは編集できない
Pythonでconfigファイルを参照できるライブラリにparamiko
があるらしい。
http://docs.paramiko.org/en/2.1/api/config.html
http://calkinos.hatenablog.com/entry/2016/04/25/092414
http://qiita.com/k2tanaka/items/fc1d83a5bb751cd6dd83
しかし、configファイルの参照はできても、編集はできないっぽい。
SSH鍵を生成したら、自力でファイルに追記するしかなさそう。
configは分割できない
すべてのSSH設定をたったひとつのファイルで一元管理せねばならない。
たとえばGitHubだけの設定を別ファイルにしたいとか、個人用アカウントだけを別ファイルにしたいとかができない。
複数のconfigファイルを作ってコマンド実行単位で使い分けたい。が、それもできないと思われる。
SSHの確認
暗号強度
指定した鍵ファイルの暗号強度を調べる。
ssh-keygen -l -f "{秘密鍵ファイルパス}.pub"
{-b入力値} {長い文字列} {-C入力値} (RSA)
お前らのSSH Keysの作り方は間違っている - Qiita
通信
~/.ssh/config
で設定した値を使ってSSH鍵などを指定する。
ssh -T {config.User}@{config.Host}
ssh -T git@github.com.{user}
Hi trysrv! You've successfully authenticated, but GitHub does not provide shell access.
successfully
と表示されたら成功。
~/.ssh/config
で設定した値のなかに存在しない名前を使ったら以下のエラー。
ssh: Could not resolve hostname csharpstudy0: Name or service not known
存在しない公開鍵ファイルパスを使ったら以下のエラー。
{存在しない公開鍵ファイルパス}: No such file or directory
API
https://developer.github.com/v3/users/keys/#create-a-public-key
このAPIを使い、先述の通りに作成したSSH公開鍵をGitHubに設定する。
GitHubアカウント作成
新しいテスト用のアカウントを作っておく。
- GitHub登録ページにアクセスする
- ユーザ名、メールアドレス、パスワードを入力する
free
プランを選択する
- テキトーに自分の情報を入力して
submit
ボタン押下する
- ログイン後の画面が表示される
- 登録したMailAddressにGitHubからメールが届くので
Verify email address
リンクを押下する Your email was Verified.
と上部に表示されているはず。これで有効なE-MailAddres
問題
ssh-keygen
,ssh
, コマンドが必要である~/.ssh
ディレクトリ,~/.ssh/config
ファイルを作成する必要がある
Windowsの標準コマンドプロンプトにはssh-keygen
, ssh
, コマンドがないと思う。Pythonでできたらいいのだろうが調査が面倒。とりあえずLinuxコマンドを使用して実装する。
所感
これをPythonで実装する。