前回、sshからsuでユーザを切り替えて、ログインユーザではないユーザから直接コマンドを実行させるという内容について記述していたが、この方法だとttyの払い出しがなされないということに気づいた。

sshから直接suコマンドでユーザを切り替えてコマンドを-cオプションで実行させる場合、残念ながら仮想端末が有効にならないし、そのためのオプションというのも用意されていない。 じゃあどうすればいいかというと、scriptコマンドを経由することで仮想端末が使えるようになるので、それを利用する。

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

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

/home/target
target
/dev/pts/2
Connection to bs-pub-cent7-02.blacknon.local closed.

あまりttyが必要になるコマンドというのもそう多くはないだろうけど、こういうやり方もあるということで…。 地味にログも残るので、悪くはないやり方なのではないだろうか。