はじめに
明けましておめでとうございます。
SSHエージェントフォワーディングをして、接続先のサーバーでユーザーを切り替え、git cloneなどをしたかった。
結論、sudoでなら鍵を使えたが、切り替えたユーザーでは使えなかったので、記録として残しておく。(代わりにPersonal Access Tokenを使うことにした)
やりたかったこと
# user1にSSH
$ ssh user1@192.168.0.0 -A
# user2に切り替え
$ whoami
user1
$ sudo -i -u user2
# user2でgit clone
$ whoami
user2
$ git clone git@github.com:ohakutsu/repository_name.git
なぜ鍵を使えないのか
user1のSSH_AUTH_SOCK
がuser2に引き継がれていない
$ whoami
user1
$ env | grep 'SSH_AUTH_SOCK'
SSH_AUTH_SOCK=/path/to/socket
# user2に切り替え
$ sudo -i -u user2
$ whoami
user2
$ env | grep 'SSH_AUTH_SOCK' # ない
env_keep
を設定してSSH_AUTH_SOCK
が引き継がれるようにしたが、
# 以下を追加
$ sudo visudo
Defaults env_keep += "SSH_AUTH_SOCK"
うまく動いていない。
$ sudo -i -u user2
$ whoami
user2
# 渡っていることを確認
$ env | grep 'SSH_AUTH_SOCK'
SSH_AUTH_SOCK=/path/to/socket
$ git clone git@github.com:ohakutsu/repository_name.git
Cloning into 'repository_name'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
ssh-agentに登録されている鍵を確認してみると、パーミッションに問題がありそう。
# user1
$ ssh-add -l
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# user2
$ ssh-add -l
Error connecting to agent: Permission denied
見てみると、所有者がuser1になっているための様。
$ ls -la /tmp | grep 'ssh'
drwx------ 2 user1 4096 Jan 1 00:00 ssh-XXXXXX
なので、以下のようにsudoでcloneなどはすることはできるが微妙な感じ。
$ whoami
user2
$ sudo git clone git@github.com:ohakutsu/repository_name.git
パーミッションを変えるのは怖いので諦めることにした(Personal Access Tokenを使うことにした)