SSH鍵認証でsudoする

GCEのブラウザコンソールからSSHすると、google-sudsersグループに追加されてsudo出来るんだけど、iTerm2から入るとグループに追加されないからsudo出来ない。
まあいいんだけど作業はiTerm2でやりたい。でもデフォルトユーザに弱いパスワードを設定してセキュリティは下げたくない。
というわけで、せっかくSSHしてるんだからSSHの鍵でsudo出来ないか調べたら以下のサイトがあったので参考にしながら設定してみた。

qiita.com

ますはリモートサーバでlibpam-ssh-agent-authを使うようにpamの設定をする。
参考:https://manpages.ubuntu.com/manpages/bionic/man8/pam_ssh_agent_auth.8.html

$ sudo apt search libpam-ssh-agent-auth
Sorting... Done
Full Text Search... Done
libpam-ssh-agent-auth/jammy 0.10.3-3.1ubuntu2 amd64
  PAM Authentication via forwarded ssh-agent

$ sudo apt install libpam-ssh-agent-auth

以下の行を先頭に追加。
authorized_keysはホームディレクトリの物を使う設定にした。
上手く動いたら debug は外してよい。

$ sudo vi /etc/pam.d/sudo

auth [success=3 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys debug

sudoの設定追加もする。

$ sudo vi /etc/sudoers
Defaults        env_keep += "SSH_AUTH_SOCK" #←を追加

$ sudo vi /etc/sudoers.d/user
username ALL=(ALL) NOPASSWD:ALL # ← usernameを自分のログイン名にする

後はpamで設定したauthorized_keysに公開鍵を登録する訳なんだが、今使っているtailscale sshの場合、鍵管理は全部お任せで公開鍵がどこにあるか分からず、1passwordでSSH鍵管理するように変更することにした。
というわけで、tailscale sshをOFFにする。

$ sudo tailscale up --ssh=false

試しにsshしてみると1passwordの認証ダイアログが上がってきたので、切り替わっていることが分かる。

1passwordでSSHキーを生成。鍵タイプはEd25519にしておく。

生成した公開鍵をpamで設定したauthorized_keysに登録する。
今回初めてauthorized_keysを作成したのでパーミッションも変更しておく。

$ cat <<EOF >> ~/.ssh/authorized_keys
ssh-ed25519 生成した公開鍵
EOF

$ chmod 600 ~/.ssh/authorized_keys

1passwordのssh-agentが使われるように設定する。
ローカルの.ssh/configを見るとAgent転送の設定が無かったので追加。
sshしてみて環境変数 SSH_AUTH_SOCKがあればOK。

$ vi .ssh/config
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
ForwardAgent yes    # ← これを追加

$ ssh hogehoge
$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/ssh-XXXXXXXXX/agent.00000

ログインシェルの設定に以下を追加する。
自分の環境はzsh+zprestoで、自分用の設定ファイルを読むようにしているので以下のようにした。

$ vi ~/.zshrc-gozu

export SSH_AUTH_SOCK=~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock  # ←追加 

やったね!
これで、sudo出来ましたよと。