AND コマンドを使用して sudo ユーザーに切り替えると機能しません。

AND コマンドを使用して sudo ユーザーに切り替えると機能しません。

あるユーザーのSSH秘密鍵を一度に別のユーザーにコピーしようとしています。

sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/

このコマンドを1つずつ実行すると正常に実行されます。ただし、次のようにエラーが表示されます。

cp: cannot create regular file ‘/home/sg-user/keys/master.pem’: Permission denied

上記のコマンドを実行すると、以下のようにルートプロンプトに切り替わります。

root@sk-box:/home/sk# 

頑張った

sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/ && exit

コマンドが操作を完了した後、ルート端末を終了していることを確認してください。しかし、シャットダウンコマンドは効果がなく、ルートセッションからプロンプトが出ません...

注:パスワードを要求せずにファイルをsudo su使用するように構成されています。/etc/sudoers

答え1

コマンドが実行されるとサブプロセスに分割されるため、「su」コマンドが実行されると実際にはルート端末で実行されるのではなく、cpコマンドとは異なるプロセスで実行されます。

sudoでcpを実行するとコマンドは機能しますが、ルート端末内では実行されません。これを行うには、su内で別々にコマンドを実行する必要があります。

sudo su && sudo cp /home/sk/keys/master.pem /home/sg-user/keys/

コピーを完了したい場合は、「sudo so &&」は重複します。これが必要なものです。

sudo cp /home/sk/keys/master.pem /home/sg-user/keys/

答え2

sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/

これでコマンドが実行されますsudo su。デフォルトでは、または(シェルがbashの場合)sudo suと同じ対話型シェルをrootとして実行します。コマンドの完了後に成功ステータスが返されると、元のユーザーとしてコマンドが実行されます。sudo -ssudo bashcp

シェルに関する限り、sudoこれは特別なシェル構文ではなく一般的なコマンドです。したがって、他のコマンドと同様に、&&これはコマンド区切り文字であり、左のコマンドが最初に実行され、次に右のコマンドが実行されます(最初のコマンドが成功した場合)。

 sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/ && exit

sudo suこのバリアントは同じことを行います。ただし、親シェルが返され、ファイルがコピーされると終了します(該当する操作が成功したと仮定)。このsuコマンドは、親シェルが後で実行するコマンドではなく、入力として渡したコマンドを実行する対話型シェルを実行します。

2つのコマンドをrootとして実行し、最初のコマンドが成功した場合にのみ2番目のコマンドを実行するには、sudo2回呼び出すだけです。

sudo command1 && sudo command2

あるいは、sudoシェルを呼び出して、対応するネストされた&&シェルで演算子を使用することもできます。

sudo sh -c 'command1 && command2'

あなたの例では1つのコマンドしか実行していないので、

sudo cp /home/sk/keys/master.pem /home/sg-user/keys/

sudo suデフォルトでは常に役に立たない。ユーザーの変更に使用されるsudoためです。指定されたコマンドはすでにrootとして実行されているため、重複してsuいます。これはシェルをrootとして実行します。sudosusudo su

答え3

あなたは試す必要があります

sudo cp /home/sk/keys/master.pem /home/sg-user/keys/

関連情報