
諸事情があり、sudoを使わずにsuだけでユーザを切り替えてコマンドを実行したい、その時にパスワードの入力をキーボードから行わずに自動化させたいということがあったので、調べてみた。 こういった場合、ヒアドキュメントを使えば指定した入力は標準入力として扱われるので、それでパスワードの入力が自動化できる(ただ、テキストとして丸見えになるし、(psの出力には残らないけど)historyにも残るので自己責任で…)。
bash
su - user -c 'command' << EOF
password
EOF
shell[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接続する場合
bash
ssh login@host "su - user -c 'command' << EOF
password
EOF"
sshpassを使う場合
bash
sshpass -p password "su - user -c 'command' << EOF
password
EOF"
実際にやった結果がこちら。
shell[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が最初からある程度設定できてるので、普通ならそちらでやればいいのだけど、自分の管理外で設定も変えられないちょっと古いサーバとかならこういう方法もあるのかなと。