SSH接続で、sudo コマンドを使う

 

ubuntuから、RaspberryPiに接続し、DLNAサーバを再起動しようとしたら

端末 (tty) が存在せず、パスワードを尋ねる (askpass) プログラムが指定されていません

というエラーが発生し、実行できなかった。

 

f:id:zar185919:20200514041630p:plain


対策 1

パスワードを要求ぜずに、コマンドを実行するように設定する。

ここでは、特定のユーザに対して特定のコマンド(/bin/systemctl)をパスワードを要求しないで、実行できるように設定を変える

コマンドは、

  • ~$ sudo visudo

f:id:zar185919:20200514045100p:plain

パスワードを要求せずに、/bin/systemctl許可する

書式は

  (ユーザー) (ホスト)=(誰々として) コマンドフルパス指定

(ユーザー)にグループ指定する場合は、%グループ名で指定する。

 

コマンドのパスは、whichかtype等で調べることができる

whichは環境変数PATHに設定されているパスからコマンドを調べる。

typeは、指定したコマンドを実行したとき実際どのコマンドが実行されているかを調べる。エイリアス、シェルの組み込みコマンド、PATHで設定されているコマンドを調べる。一度使ったコマンドは、ハッシュ(一時記憶)される。

f:id:zar185919:20200514051256p:plain

which と type

 

対策2 SSHのオプションで対応

sudoの設定を変えると、常に、パスワード不要でコマンドを実行できるようになるので、sshにオプション「-t」(仮想的に端末を割り当てる)をつけて実行する

  • ~$ ssh -t user@server  sudo command

f:id:zar185919:20200514054444p:plain

オプション -t をつけて実行

serverにログインする際のパスワードと、serverで、sudo commandを実行する際の2回パスワードを聞かれるが、設定を変えずに実行できる。

 

ログファイルは、 /var/log/auth.logにたまります。