web-dev-qa-db-ja.com

バッチファイルからPuTTYにログインした後、リモートサーバーでSudoを使用してコマンドを実行します

毎日リモートサーバーにログインして、同じ一連のタスクを実行する必要があります。私はWindowsプラットフォームを使用しており、リモートサーバーはUnixです。 PuTTYを使用してリモートサーバーにログインします。手作業を減らすために、このタスクを自動化する必要があります。

私はこのコードを試しました:

start PuTTY.exe -ssh -load session -l username -pw password -m command.txt -t

command.txtに含まれるもの:

Sudo su - user1 
ls 
cd directory

command.txtの最初のコマンドのみが機能しており、PuTTYはユーザーからの入力を期待しています。

すべてのコマンドをユーザー入力なしで実行する必要があります。

重要なこと:

  • 私はrootユーザーではありません

  • パスワードなしでuser1に切り替えるために許可されたアクセス

  • PuTTYのみを使用するという制約があります(Plinkのインストールは許可されていません)

2
learner1

command.txtに含まれるコマンドは、マスターシェル 1つずつ実行されるためです。

したがって、マスターシェルはSudoを実行し、終了するのを待ってから、他のコマンド(lsおよびcd)に進みます。そして、Sudoは終了しません(少なくともそれ自体では)。

lscd子シェルsuによって実行されます。

コマンドを実行するようにsuに指示する必要があります。

これは機能するはずです:

Sudo su - -c "ls ; cd directory" user1

またはこれ

echo "ls; cd directory" | Sudo su - user1

あなたは実際にシェルで働き続けたいと思いますが。上記はコマンドが実行されると終了しますが。

したがって、コマンドのリストにシェルを追加する必要があります。

Sudo su - -c "ls ; cd directory ; /bin/bash" user1

または

echo "ls ; cd directory ; /bin/bash" | Sudo su - user1
2
Martin Prikryl