MENU

〖備忘録〗サーバー上のシェルスクリプトディレクトリをGit管理してローカルPCと同期する手順


目次

概要

サーバー上に置いてあるシェルスクリプト群(例:/home/<USER>/shell)を、あとから Git 管理化 して、

  • サーバー:実行環境
  • GitHub:中央リポジトリ(バックアップ)
  • ローカルPC(Windows):編集環境

という構成にしたときの手順メモ。

実際にやった流れに加えて、

  • 一度試したが採用しなかった方法
  • 代替案として取り得る方法

も合わせて残しておく。

※ユーザー名・サーバー名・GitHubアカウント名などは <USER><github-user> などのダミー表記にしている。


前提環境

  • サーバー
    • OS:Linux系
    • SSH ログイン可能
    • 対象ディレクトリ:/home/<USER>/shell
  • GitHub アカウント:<github-user>
  • ローカルPC:Windows(Git for Windows + VSCode 利用)
  • サーバー側にはすでに Git がインストール済み

1. サーバーディレクトリを Git 管理下に置く(実際にやった手順)

1-1. SSH ログイン&バックアップ作成

まずはサーバーへ SSH ログインして、対象ディレクトリのバックアップを取る。

ssh <USER>@<SERVER>

# 対象ディレクトリへ
cd /home/<USER>/shell

# 念のため丸ごとバックアップ
cp -a /home/<USER>/shell /home/<USER>/shell_backup_$(date +%Y%m%d)

1-2. Git リポジトリ初期化&初回コミット

cd /home/<USER>/shell

git init
git config user.name "&lt;your-name&gt;"
git config user.email "&lt;your-email&gt;"

ログや一時ファイルなど、Git管理したくないものがあれば .gitignore を作成しておく。

echo "*.log" &gt;&gt; .gitignore
# 他に除外したいファイルがあれば追加

すべてステージングしてコミット:

git add .
git commit -m "Initial commit: current shell scripts on server"

この時点で、サーバー上の /home/<USER>/shell がローカル Git リポジトリになった。


2. サーバーから GitHub に push する(最終的に採用した方法)

2-1. GitHub 側でリポジトリ作成

GitHub の Web 画面から新規リポジトリを作る:

  • オーナー:<github-user>
  • リポジトリ名:server-shell-scripts(例)
  • README などは作らず空リポジトリでOK

2-2. リモートを SSH URL で登録

cd /home/<USER>/shell

git branch -M main
git remote add origin git@github.com:&lt;github-user&gt;/server-shell-scripts.git

2-3. サーバー側 SSH 鍵を ssh-agent に登録

サーバーにはすでに GitHub 用の SSH 秘密鍵 がある前提 (例:~/.ssh/id_ed25519_project。この公開鍵を GitHub の「SSH and GPG keys」に登録しておく)。

push 前に以下を実行:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_project

これで、以降の GitHub への SSH 接続でこの鍵が使われる。

2-4. GitHub へ初回 push

cd /home/<USER>/shell
git push -u origin main

これで

  • サーバー上の /home/<USER>/shell
  • GitHub の <github-user>/server-shell-scripts リポジトリ

が同期された。


3. 一度試したが採用しなかった方法(パスワードによるHTTPS push)

最初はリモートURLを HTTPS にした状態で、以下のように push を試した。

git remote add origin https://github.com/<github-user>/server-shell-scripts.git
git push -u origin main

このとき、GitHub のログインパスワードを求められたため、ブラウザログインと同じパスワードを入力したところ、以下のようなエラーに。

Password authentication is not supported for Git operations.
Invalid username or token.

GitHub は Git 操作に対する 生パスワード認証を廃止 しており、 HTTPS を使う場合は Personal Access Token(PAT) が必須。

この段階では「サーバーからPATを使う運用」は採用しない方針にしたため、最終的には SSH方式に切り替え て解決した。


4. 代替手段として取り得る方法

4-1. 代替案A:サーバーから HTTPS + PAT で push する

サーバー側で SSH 鍵を使いたくない場合は、Personal Access Token(PAT) を使って HTTPS で push する方法もある。

ざっくり手順:

  1. GitHub の「Settings → Developer settings → Personal access tokens」でトークンを発行
    • 少なくとも repo 権限を付与
  2. サーバー側でリモートURLを HTTPS に設定:
git remote set-url origin https://github.com/<github-user>/server-shell-scripts.git
  1. git push 実行時に
    • Username:GitHubユーザー名(<github-user>
    • Password:発行した PAT 文字列
    を入力して認証する。

PAT は 漏洩させない/スクリプトに直書きしない、などの扱いが重要。

4-2. 代替案B:ローカルPC側も SSH で統一する

今回のケースでは、ローカルPCではすでに HTTPS + ブラウザ認証 + Windows 資格情報 が動いていたので、そのまま HTTPS で clone する運用にした。

必要であれば、ローカルPC側にも SSH 鍵を用意して GitHub に登録すれば、以下のように SSH で clone することも可能。

git clone git@github.com:<github-user>/server-shell-scripts.git
  • メリット:サーバー・ローカルとも SSH に統一できる。
  • デメリット:Windows 側の SSH 設定が少し増える。

5. ローカルPC(Windows)に clone する(実際に採用した方法)

5-1. 作業ディレクトリへ移動

例:

cd C:\work

5-2. HTTPS で clone

git clone https://github.com/<github-user>/server-shell-scripts.git
cd server-shell-scripts

このとき、過去に VSCode などから GitHub へログインしていたため、 Windows の「資格情報マネージャー」に git:https://github.com という資格情報が保存されており、 パスワード入力なしで clone が成功 した。


6. 最終的な運用フロー

6-1. ローカルPCで編集 → GitHub へ push

cd /path/to/server-shell-scripts
# シェルスクリプトを編集
git status
git add .
git commit -m "Update shell scripts"
git push origin main

6-2. サーバー側で最新状態に更新

ssh <USER>@<SERVER>
cd /home/<USER>/shell

# 必要に応じて ssh-agent に鍵を登録
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_project

git pull origin main

これで、

  • ローカルPC:編集・コミット・レビュー用
  • GitHub:履歴管理&バックアップ
  • サーバー:実行環境(git pull で更新)

という形に整理できた。


7. 公開時に気をつけるポイント(自分用メモ)

実際にブログなどで公開する場合は、以下に注意する:

  • 実際のサーバー名・IPアドレス
  • SSH ログインユーザー名
  • 実際のディレクトリ構造(深すぎるパス)
  • GitHub アカウント名(気になる場合)
  • SSH 秘密鍵のファイル名・置き場所・パスフレーズの有無
  • PAT(Personal Access Token)の値や発行画面のスクリーンショット

など、セキュリティに関わる情報は書かない/ダミーに置き換える

また、リポジトリ自体にも

  • パスワード・APIキー・接続情報をコミットしない
  • .gitignore でログファイルや一時ファイルを除外する

といった基本的な注意点も忘れないようにする。


以上、サーバー上のシェルディレクトリをあとから Git 管理にして、GitHub とローカルPCとで同期できるようにしたときの備忘録。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次