No.
blog - 9
Date

sshとrsyncでアップロード(ssh編)

こんにちは,むぎやんです.

このサイトは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の設定でもパスフレーズの省略は問題なくできるらしいのですが,,,今回はサーバー上でキーペアを作ったせいで公開鍵が手元にありません.次回からは自分でキーペア作った方がいいっぽいですね.

参考サイト