ローカルorリモートマシン(ssh)でsuによるユーザ切り替え時に自動でパスワード入力をさせる

諸事情があり、sudoを使わずにsuだけでユーザを切り替えてコマンドを実行したい、その時にパスワードの入力をキーボードから行わずに自動化させたいということがあったので、調べてみた。 こういった場合、ヒアドキュメントを使えば指定した入力は標準入力として扱われるので、それでパスワードの入力が自動化できる(ただ、テキストとして丸見えになるし、(psの出力には残らないけど)historyにも残るので自己責任で…)。

su - user -c 'command' << EOF
password
EOF
[login@BS-PUB-CENT7-02 ~]$ pwd
/home/login
[login@BS-PUB-CENT7-02 ~]$ whoami
login
[login@BS-PUB-CENT7-02 ~]$
[login@BS-PUB-CENT7-02 ~]$ su - target -c 'echo;pwd;whoami;' << EOF
password
EOF
パスワード:
/home/target
target

ssh接続時のパスワード入力には利用できないが、ログインユーザからユーザを切り替えて指定したコマンドを実行させたい場合であれば同じ方法が使える。 もしssh接続時のパスワード入力も自動化したいというのであれば、(普通なら鍵認証とかにするのだけど)sshpassあたりを使うといいだろう(ただし自己責任で…)。

普通にssh接続する場合

ssh login@host "su - user -c 'command' << EOF
password
EOF"

sshpassを使う場合

sshpass -p password "su - user -c 'command' << EOF
password
EOF"

実際にやった結果がこちら。

[blacknon@BlacknonMacBook-Pro2018][~]                            [BATTERY:100%]
(`・ω・´)  < ssh login@BS-PUB-CENT7-02.blacknon.local "su - target -c 'echo;pwd;whoami' << EOF
password
EOF"
login@bs-pub-cent7-02.blacknon.local's password:

/home/target
target
パスワード:%

[blacknon@BlacknonMacBook-Pro2018][~]                            [BATTERY:100%]
(`・ω・´)  < sshpass -p password ssh login@BS-PUB-CENT7-02.blacknon.local "su - target -c 'echo;pwd;whoami' << EOF
password
EOF"

パスワード:
/home/target
target

最近のディストリビューションであればsudoが最初からある程度設定できてるので、普通ならそちらでやればいいのだけど、自分の管理外で設定も変えられないちょっと古いサーバとかならこういう方法もあるのかなと。