任意の環境にSSH接続すれば色々と捗ります。
学ぶメリット
- 本番環境にGithubからpull
- Githubからの自動デプロイ
- SCPやRSYNCコマンドなどでサーバーのデータを高速にDL/UP
- Dockerとの親和性
- セキュリティ意識の向上
- APIを安全に使用できる
基本的な概念
- まず2種類の鍵を作る
- 公開鍵を接続する先に持たせる
公開鍵(key.pub)はオープンにしてOK(とはいえ節度は守るべき)- 秘密鍵をユーザーに持たせる
- 秘密鍵は完全に非公開の状態にする
指摘あり修正。
公開鍵はプラットフォーム側に持たせるので、closedではない(秘密鍵はユーザーだけが持つのでclosed)。
ただ公開鍵をSNSで公開するようなものではないよねっていうニュアンスです。
具体的には、公開鍵は南京錠のこと。
秘密鍵は南京錠を開くための鍵のこと。
鍵としての側面だけなら、鍵穴と鍵のセットで開く南京錠の例えはわかりやすい。
しかし本来、公開鍵認証は秘密鍵を持つユーザーを特定するためのもの。
文字通り『鍵+認証』の機能を持つため、南京錠は不適切でした(南京錠の鍵にユーザーを特定する機能はない)。
なので正確には、銀行印の方が的を射ている(参考:公開鍵認証のイメージ)。
実行手順
主に2パターンあると思う。
自分で鍵を作成するケース
ユーザーの端末で
ssh-keygen
を実行。
.sshフォルダ内に、公開鍵・秘密鍵が作成されます。
作った公開鍵をサーバーやGithubなどログインしたいプラットフォームに登録する。
その後は秘密鍵を使ってSSH接続が可能になります。
プラットフォーム側で鍵を生成するケース
プラットフォーム内の鍵を作成するページから作る。
秘密鍵がローカル(=接続するユーザーが持つ)にDLされます。
DLした秘密鍵を使ってSSH接続します。
※たぶん裏側でssh-keygenか同等の機能を動かしている
接続するためのコマンド例
よく使うコマンドまとめておく。
ssh接続を行う
例えば-p は、Xserverの場合10022。
githubなんかは不要。
ssh -i ~/.ssh/privateKey loginUser@IPaddress -p portNum
アップロード
rsync -avzP -e "ssh -i ~/.ssh/privateKey -p 10022" --exclude 'AAA' --exclude 'BBB' ~/filePath loginUser@IPaddress:~/uploadPath/
- -a:コピー元ファイルの状態を保持する
- -v:転送情報を表示する
- -z:圧縮して送信
- -P:転送中の情報を表示+転送に失敗したファイルを削除
- -e:シェルコマンドを実行
- --exclude:UP/DL対象から外すファイルやフォルダを指定(個別に指定する必要がある)
ダウンロード
アップロードのコマンドから、fileの前後を逆にしただけ。
rsync -avz -e "ssh -i ~/.ssh/xs980405.key -p 10022" --exclude 'AAA' --exclude 'BBB' loginUser@IPaddress:~/filePath/ ~/downloadPath
Githubへの接続確認
まずはGitを実際に使用する環境下のターミナル上で下記を実行。
git init
git remote add origin git@github.com:user/repository
eval $(ssh-agent -s)
ssh-add ~/.ssh/privateKey
ssh-add -l ←確認用なのでやらなくても問題ない
次はGithubへの接続テスト。
エラーが出なければ、とりあえずサーバーからGithubへの接続はできるものと考えてOK。
git cloneやpullなどが使えるようになる。
ssh -T git@github.com
参考文献
ぜひ、より正確に学ぶことをオススメします。