私のスクリプトのコマンドは次のとおりです。
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 を使用します。