sshユーザーの変更とコマンドの実行

sshユーザーの変更とコマンドの実行

私のスクリプトのコマンドは次のとおりです。

ssh -i $KEY $USER@$HOST "sudo su tom; echo $DATA >> /home/user/file.txt

これらのコマンドは個別にはうまく機能しますが、スクリプトで一緒に使用すると中断されます。

このコマンドを単独で実行すると、sudo su tom; cat /home/user/file.txt ユーザーtomをログアウトしたときにのみcatが実行されます。

bashスクリプトでユーザーを変更してコマンドを実行するには?

答え1

Paul Calabroが提案したもの(私の考えではこれは主な問題ではないようです)に加えて、リモートコンピュータでコマンドを実行するために使用されるコマンドラインソルバー(シェル)も定義する必要があります。ローカルコンピュータとは異なるシェルがある可能性があるためです。マスター。

-tコマンドのパラメータも必要だと思いますssh

-t は擬似 tty 割り当てを強制します。これは、リモートコンピュータ上で任意の画面ベースのプログラムを実行するために使用することができ、これは、例えばメニューサービスを実装する場合に有用である。複数の -t オプションは、ssh にローカル tty がない場合でも tty 割り当てを強制します。

以下はあなたが探しているものに近いものです。

ssh -it $KEY $USER@$HOST 'sudo su tom; echo $DATA >> /home/user/file.txt; bash'

残念ながら、上記のソリューションではsudo su&&の "concat"はechoまだ機能しませんが、コマンド-c引数を使用するとsu問題が解決します。

-c, --command=COMMAND 単一の COMMAND をシェルに渡すには、-c を使用します。

答え2

指定したコマンドは次のとおりです。

ssh -i $KEY $USER@$HOST "sudo su tom; echo $DATA >> /home/user/file.txt

これに関するいくつかの小さな注意:

  • このコマンドは、スペースが含まれている$KEYと予期しない動作を生成します。 (不可能ではありません。)$USER$HOST
  • $DATAsshリモートでログインしているホストではなく、コマンドを実行しているホストを展開します。 (私はこれがあなたの意図であると仮定します.)
  • "コマンドの最後に閉じるステートメントはありません。コピー - 貼り付けエラーのようです。

このコマンドのポイントと問題を解決するコマンドについて説明します。

sudoroot. それはマンページを引用するために使用されます。

sudo, sudoedit - execute a command as another user

だから、希望する簡単なコマンド例:

ssh -i $KEY $USER@$HOST "sudo -u tom echo $DATA >> /home/user/file.txt"

これは$USER書き込み権限を想定しています/home/user/file.txttomこれらの権限を持っている人だけがいる場合は、次を使用してください。

ssh -i $KEY $USER@$HOST "sudo -u tom -i 'echo $DATA >> /home/user/file.txt'"

詳細についてはを読んでくださいman sudo

答え3

ユーザーを切り替えることはできません。ルートとして実行することはトリックを実行するようです。

ssh -i $KEY $USER@$HOST "echo "$DATA" |sudo tee $DIRECTORY"

関連情報