エイリアスでホスティングサーバにファイルを一括転送する

CORESERVER を使いながら毎回 SFTP が使えるソフトウェアで送信したり長いコマンドを入力して転送するのが面倒だと思っていたのですが,考えてみるとエイリアスを設定すれば楽ですよね.

公開鍵の作成

未作成の場合.

terminal
$ ssh-keygen -t rsa -b 4096

秘密鍵 id_rsa,公開鍵 id_rsa.pub のキーペアが作成されます.

リモートサーバへの登録

既存の公開鍵あるいは上記で作成した公開鍵をリモートサーバに登録します.

terminal
$ ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<hosting server's address>
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/<username>/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
<username>@<hosting server's address>'s password: (入力)
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "ja_JP.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh '<username>@<address of hosting server>'"
and check to make sure that only the key(s) you wanted were added.

以下のように接続できれば OK.

terminal
$ ssh -i ~/.ssh/id_rsa <username>@<address of hosting server>
Last login: Thu Dec 17 13:47:38 2020 from xxx

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "ja_JP.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
[<username>@<hosting> ~]$ 

以降は,登録した公開鍵に対応する秘密鍵を用いることで認証できるようになります.

リモートサーバへの送信

scp コマンドを利用することでローカルからリモートサーバへファイルを送信できます.

しかし,コマンドを毎回入力するのは面倒なので,.bash_profile や .zshrc 等でエイリアスを設定しておくと便利です.

私は CORESERVER を利用しているので,その設定に合わせると概ね以下のようになります.

terminal
$ vi ~/.zshrc
~/.zshrc
alias upd='cp -r ~/path/to/dist ~/example.com &&  scp -i ~/.ssh/id_rsa -r ~/example.com <username>@<hosting server address>:~/public_html && rm -rf ~/example.com'
  • yarn generate で生成した dist を適当な場所に一時的に別名コピーする
  • 別名コピーした内容をコアサーバの public_html 内にアップロードする
  • 別名コピーしたディレクトリを削除する

CORESERVER はディレクトリとドメインを紐付けるためにディレクトリ名がドメインになっているので,その影響でこのようなコマンドになっています.

(差分のみを送信できればもっと早い…)

以降はビルド後に upd を実行することでリモートサーバに転送できるようになります.

最後に

deploy コマンドを利用することで更新できる Firebase Hosting 便利だな~と思って使っていましたが,エイリアス設定すれば自前のホスティングサーバでも楽に利用できそうです.

Nuxt.js を SSG で利用できるのでいいですね.