みなさんこんにちは.初記事ですので温かい目で見ていただけるとありがたいです.基本ChatGPT先生に教えてもらった内容を状況を合わせてまとめているだけです.めったにない状況だと思いますが同じ状況で困っている方に届けばと思い記事を書きました.
TL;DR
- SSHが参照するファイルはシステムのユーザー情報(たとえば
/etc/passwd
などに書かれた情報)を元にする - Gitが呼び出すSSHコマンドは環境変数の
GIT_SSH_COMMAND
やgit config core.sshCommand '...'
のようなコマンドで変更可能
状況
みなさんは次のような状況に陥ったことはないですか?
- サーバーなどで管理者権限がない
- なんやかんやでシステムが指定するホームディレクトリがない
- SSHしたいけど,
~/.ssh
に書き込み権限がないから怒られる
はい,私が今さっきまで陥っていた状況です.このような状況下ではどうすれば最低限SSHが実行できるのかについて説明していきます.
以下,なぜそのような状況になったのかですが、ぐちっぽくなってしまったので読み飛ばして大丈夫です.
現在研究室のLinuxサーバーでは先生がホームディレクトリにマウントされている分散ファイルシステムの移行作業を行ってくださっています.そのおかげで現在一時的にホームディレクトリにアクセスできません.研究室のみんなが使用するので管理者権限も与えられておらず,HOMEディレクトリを変更することもできません.
各サーバー上に自由にアクセス可能なディレクトリが用意されているのでそちらで作業は継続可能なのですが,手元のパソコンで書いていたコードをGitHub経由でアップデートしようとしたときに問題が起こりました.
git pull
しようとするとSSHはどうしても標準の/home/user/.ssh
を参照しようとしてしまいコマンドが失敗してしまったのです.$HOME
を変えても頑なに/home/user/.ssh
以下のファイルを編集,参照しようとします.
原因
ChatGPT先生によるとどうやら,SSHコマンドが参照するファイルの位置はシステムが指定するホームディレクトリを元に決められるらしいです.例えば/etc/passwd
とかでして,UNIXのプログラム上ではgetpwuid
関数の結果に基づき決定されるそうです.そのため,$HOME
を変えてもSSHが参照するフォルダは何も変更されません.
準備
ここではGitHubへアクセスするための鍵はすでに用意しているものとします.
解決策
とりあえずgit pull
だけしたいのであればSSHの3つのファイルの参照先だけ変えれば大丈夫です.
~/.ssh/known_hosts
~/.ssh/config
- 秘密鍵
自分は新しい擬似的なホームディレクトリ(ここでは/new/home
としておきます)を作ってその下に.ssh
を作ってそれぞれのファイルを配置しました.
Gitが呼び出すSSHコマンドは次の2通りで変更可能のようです.
- 環境変数の
GIT_SSH_COMMAND
-
git config core.sshCommand '...'
のというコマンド
そのため,1つ目の方法を使うなら次のようになります.
export GIT_SSH_COMMAND='ssh \
-o UserKnownHostsFile=/new/home/.ssh/known_hosts \
-F /new/home/.ssh/config \
-i /new/home/.ssh/github'
ただし,github
はGitHubに登録した鍵の秘密鍵のファイルです.
これでホームディレクトリも管理者権限もなくてもgit pull
できるようになりました!
引き続きバリバリ働いていきましょう!