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