ルートログインが無効なSSHサーバーがあります。実行後にファイルから入力を必要とする特権コマンドを実行したいと思います。ユーザーの介入なしにonelinerコマンドまたはスクリプトを介してすべての操作を実行したいと思います。
キー認証設定があるため、コマンドを実行するときにのみ次のパスワードが必要です。
私が得た最も近いのはこれでした
echo "mypass" |ssh -tt user@ip "sudo specialCommand"
出力は次のとおりです。
mypass
[sudo] password for user:
specialCommand requests inputfile contents
mypassは以前に印刷され、パスワードプロンプトも許可されました。
commandInput
パスワードが承認されたら、パイプで接続したいファイルがあります。
私は推測ゲームに過ぎない様々な試みをしましたが、失敗しました。どうすればこれを達成できますか?
答え1
どうですか?
(echo "mypass"; cat commandInput) | ssh -tt user@ip "sudo specialCommand"
または、明らかにsudo
リモートホストにアクセスできるので、visudo
この行を/etc/sudoers
(using後ろにsudo
パスワードアクセスを許可する既存の行user
)?
user ALL=(root) NOPASSWD: /full/path/of/specialCommand
この行は、ユーザー(他の人ではない)に、パスワードなしでuser
root(他のユーザーを除く)として実行する権限を与えます。specialCommand
この行を介して他のコマンドを実行するには、通常sudo
どおりパスワードが必要です。
その後、以下を簡単に実行できます。
ssh -tt user@ip "sudo specialCommand" < commandInput
答え2
specialCommand
実際にはttyを必要とせず、ssh
パスワードプロンプト用にttyを作成する必要がある場合は、他のオプションは次のとおりです。sudo
(echo "mypass" ; cat commandInput) | ssh user@ip "sudo -Sp '' specialCommand"
オプションを使用すると、標準入力-S
(この場合はsudo
ユーザー入力)からパスワードを読み取ることができ、オプションを使用するとパスワードプロンプトは表示されません。echo "mypass"
-p ''
その後、適切な権限で保護された別々のファイルにパスワードを入れることができます。これは通常、スクリプトにパスワードを直接接続するよりも優れた方法です。コマンドは次のとおりです。
cat passwordFile commandInput | ssh user@ip "sudo -Sp '' specialCommand"
後者の場合、確実にするパスワードファイルには1行だけが必要です。パスワードのみがあり、他には何もありません。それ以外の場合は、パスワード行の後ろの内容がspecialCommand
。