こんにちは,むぎやんです.
このサイトはGatsbyで作ってるのですが,現状デプロイ作業に手間がかかっています.なのでお手軽デプロイを実現したいと思います.sshでサーバーと繋いでrsyncで同期とかでどうでしょう?.
今回はsshでサーバーと繋ぐとこまでやってみます.
(なお,GitHub,Netlifyを連携させて,自動でビルド&デプロイしろよ,とかは今回は無しで.近いうちにそんな構成になってそうな気もしますが,,,)
下準備
キーペア作成
今回はサーバー上でキーペアを作成可能だったのでそれを使い秘密鍵をダウンロードします.通常はssh-keygen
コマンドで作成するみたいですね.SSH-KEYGEN (1)参照.
ディレクトリやファイルの準備
$ mkdir ~/.ssh
$ mv (ダウンロードした)秘密鍵ファイルパス ~/.ssh/秘密鍵ファイル名
# configファイルも作っておきます
$ touch ~/.ssh/config
パーミッション設定
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/秘密鍵ファイル名
$ chmod 600 ~/.ssh/config
# ホームディレクトリも,もし777とかになってたらパーミッション変更
$ chmod 755 ~
configファイル編集
Host ホスト名
HostName 実際のホスト名
User ユーザー名
IdentityFile ~/.ssh/秘密鍵ファイル名
Port ポート番号
Host
: コマンドラインで入力するのはこっち.ホストのニックネームや省略形も可.HostName
: 実際にログインするホスト名を指定.IPも可.
接続してみる
$ ssh ホスト名
Enter passphrase for key '/Users/ユーザー/.ssh/秘密鍵ファイル名':
パスフレーズを聞かれるので入力.サーバーに繋がれば成功です.
確認メッセージ
初回は↓のような確認メッセージが出るかもしれません.
The authenticity of host '[実際のホスト名]:ポート ([IP]:ポート)' can't be established.
ECDSA key fingerprint is SHA256:xxxxx.
Are you sure you want to continue connecting (yes/no)?
yes
を選択しておきます.
パスフレーズを省略
毎回パスフレーズ入力は手間なので,なんとか省略します.ssh-agent
を利用するといいらしいです.今回はmacOSのキーチェーンに覚えさせるのでセキュリティ面には十分注意を,,,
ssh-agentに登録
まずssh-agentに秘密鍵を登録します.
$ ssh-add -K ~/.ssh/秘密鍵のファイル名
Enter passphrase for key '/Users/ユーザー/.ssh/秘密鍵ファイル名':
パスフレーズ入れてね,と言われるので入力します.
登録できたか確認
$ ssh-add -l
2048 SHA256:xxxxx /Users/ユーザー/.ssh/秘密鍵ファイル名 (RSA)
↑こんな感じに表示されてればOKです.これで再起動するまではパスフレーズの入力が不要になりました.
configファイルに追記(macOS専用)
この状態だと再起動のたびにパスフレーズの入力が必要になります.これを回避するために,configファイルに追記します.ssh時に自動でキーチェーンから読み込んでくれるようになるそうです.
Host * AddKeysToAgent yes UseKeychain yes
Host ホスト名
HostName 実際のホスト名
...
動作確認
$ ssh ホスト名
# パスフレーズを聞かれずに接続できればOK
再起動してもパスフレーズ聞かれずに動きました,よかった.
補足
今回はIdentitiesOnly yes
をconfigファイルに書きませんでした(書いた方がいいはずです).パスフレーズの省略が上手くいかなかったせいです.
ちなみに,公開鍵を秘密鍵と同じディレクトリに置いておけばIdentitiesOnly yes
の設定でもパスフレーズの省略は問題なくできるらしいのですが,,,今回はサーバー上でキーペアを作ったせいで公開鍵が手元にありません.次回からは自分でキーペア作った方がいいっぽいですね.