仕事でとあるサーバーから別のサーバーにあるシェルスクリプトをsudo付きで実行したいことがあった。すみません見事にこのようなエラーが出て、実行ができなかった。シェルスクリプト&sudoの超あるある案件だ。requiretty”をコメントアウトすると良いと書かれている。どのサイトにもこれはセキュリティ上よくないから!と書かれているが、それをやってる。<cmd>".#と書かれている。ここにはパスワードがクリアで表示されてしまうからダメだと書かれている。offできないからダメらしい。確かにこちらにもLinuxのシステムコールioctl()で、パスワードのechoをoffにしていることが書かれていた。http://d.hatena.ne.jp/itotto/20120214/1329191401なるほどという感じ。そのため、パスワードを表示させないように-tオプションで仮想的に端末を割り当てるように書かれている。archive.zip調べている際に下記サイトを見つけたのだけど、わかりやすく書かれていてためになった。http://language-and-engineering.hatenablog.jp/entry/20110617/p1そして他にも色々出来そうだということ、対処方法などが見つかったのでTipsとして書いておく。パスワードを変数に入れてシェルスクリプトで使用するhttp://keens.github.io/blog/2015/06/17/shell_scriptwokakutokinikiwotsuketaikoto/こちらのサイトに記載があったのだけど、readコマンドのオプション-sで入力文字を表示させないようにできるらしい。これが便利そうに思った。password:”の後にパスワードを入力させるプロンプトが出せる。パスワードをセットする。するとパスワードが表示されないので、パスワード入力用のプロンプトとして使用できる。“パスワード”と記載しているけれど、基本的には入力させるようにした方が良いと思う。sshpassでパスワードをワンライナーで読み込むパスワードを標準入力でsshに渡せるようなのだけど、その際にsshpassコマンドを使用するようだ。-lsshpassについて、CentOSでepelがあれば下記でインストール可能だ。-fでファイルから読み込むこともできるようだ。sshpassepelはyumの標準レポジトリで追加できる拡張パッケージなので下記でインストールできる。epel-release標準入力からパスワードをsudoに渡す標準入力からsudoにもパスワードを渡すことができる。/var/log/message複数のコマンドをリモート先で実行する(sudoが必要なパスワードを標準入力で渡す)もっと良い書き方がありそうだけど、こんな感じでヒアドキュメントで、SSHPASSの変数にセットしたパスワードを読み込ませてリモートでsudoを実行できる。-tだけで実行できれば問題ないのだけど、SSHした先で更にSSHさせるような場合は-ttを使用しないと怒られる。使用すると、rootのHOMEの環境変数を読み込んでくれる。-xとかpsとかするとパスワードが表示されてしまう。sttyを使って、echoをoffにしたりする方法もあるようだけど、結果的には同じことで、ASKPASSプログラムを実行できるプログラムの方が望ましいらしい。expectなどが良いらしいので、不安がある場合はexpectで実行するのが良いと思う。上記Tipsを使用する場合は、留意していただきたい。こんな感じでなんとかオプションを駆使すれば、リモート先でsudoでコマンドを実行できるし、更にシェルスクリプトを実行することも可能だということが分かった。長いことモヤモヤしていた所ではあったので、何故ダメなのかって所が分かってよかった。