みなさんこんにちは。9月18日からiOS12が降ってきましたね。私はすっかりSiriショートカットに夢中です。だって、そのままSSHクライアントにできるんですよ?
iOS12のショートカットからシェル芸してアイフョーソのクリップボードに実行結果をコピーできる!!!すげぇ!!! pic.twitter.com/66Vr6q9f7K
— (っ´∀`)っ
ー (@nullpopopo) September 20, 2018
一般ユーザで実行したコマンドやシェルスクリプトの標準出力がそのままスマホに返ってきて、しかもクリップボードに一撃でコピーできる(そしてiOS上のアプリにペーストできる)のはわかったのですが、SSH接続先でroot権限のコマンドを使いたいじゃないですか。というわけで実験してみました。

まずは普通にrootでログインしてみた
まずは、さくらのクラウドのCentOS7のイメージを起動直後、一般ユーザを作った後のスクリーンショットです。ディストリビューションのバージョンは以下の通り。
$ cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)
ユーザ作成するところのコマンドは省略しましたが、 /home の下に一般ユーザができていることが、おわかりいただけたと思います。本来ですと root ユーザが、しかもSSHの標準ポート TCP/22 で直接ログインできてしまうのは危険ですので、よしなに設定変更してください。設定変更にあたっては
こちらをご参考いただけると幸いです。
一般ユーザにパスワードを与える
先ほど作成したばかりのユーザですので、まだパスワードをつけていませんので、パスワードをつけましょう。なお、シェルプロンプトで対話を求められると(予想はしていましたが)後続の処理ができないので、 passwd コマンドに標準出力を食わせて非対話的にパスワードを与えることにします。
例えば「hamada」ユーザのパスワードを「hogehoge」にしたい場合はこうします。
# echo hogehoge | passwd --stdin hamada ユーザ hamada のパスワードを変更。 passwd: すべての認証トークンが正しく更新できました
一般ユーザでログインしてみる
Siriショートカットの「SSH経由でスクリプトを実行」に設定したユーザをrootから一般ユーザに、パスワードも先ほど設定したものに変更して id コマンドを実行してみます。
uid gid ともに 0 ではないので、 root ユーザではない、ということになります。
Siriショートカットからsudoをつけてコマンドを実行してみよう
ここでは省略していますが、一般ユーザ hamada を /etc/sudoers に追加して /root 以下を ls してみました。
問題なく /root 以下が見えていますね。と、ここで疑問です。 Siriショートカットは仮想端末なのだろうか?と。 /etc/sudoers を見てみると、「Defaults requiretty」の記述がありません。 /etc/sudoers ファイルが含まれる sudo パッケージのバージョンは以下の通りです。
$ rpm -qf /etc/sudoers sudo-1.8.19p2-13.el7.x86_64
なるほど最近のsudoパッケージだと、 -t オプションをつけてSSHする必要がないってことなのですね。試しに「Defaults requiretty」の記述を /etc/sudoers につけ足してみると...
案の定、Siriショートカットから sudo コマンドを実行することはできませんでした。
さらに、実験で使用したサーバーで root ユーザーの history を見てみましょう。
sh-4.2$ id uid=1000(hamada) gid=1000(hamada) groups=1000(hamada) sh-4.2$ sudo su - 最終ログイン: 2018/09/21 (金) 23:20:28 JST日時 pts/0 # history 1 visudo 2 history
スマホからrootユーザーでログインして実行したコマンドの履歴が残っていません。
というわけで、Siriショートカットの「SSH経由でスクリプトを実行」からsudoをつけてコマンドを実行する場合は、 /etc/sudoers に「Defaults requiretty」の記述がないか、ユーザーごとに「Defaults:USERNAME !requiretty」を記述をするか、コマンド実行時に -t オプションをつければ実行できる、ということになります。
ね、簡単でしょう?
