あるユーザーの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 -s
sudo bash
cp
シェルに関する限り、sudo
これは特別なシェル構文ではなく一般的なコマンドです。したがって、他のコマンドと同様に、&&
これはコマンド区切り文字であり、左のコマンドが最初に実行され、次に右のコマンドが実行されます(最初のコマンドが成功した場合)。
sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/ && exit
sudo su
このバリアントは同じことを行います。ただし、親シェルが返され、ファイルがコピーされると終了します(該当する操作が成功したと仮定)。このsu
コマンドは、親シェルが後で実行するコマンドではなく、入力として渡したコマンドを実行する対話型シェルを実行します。
2つのコマンドをrootとして実行し、最初のコマンドが成功した場合にのみ2番目のコマンドを実行するには、sudo
2回呼び出すだけです。
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として実行します。sudo
su
sudo su
答え3
あなたは試す必要があります
sudo cp /home/sk/keys/master.pem /home/sg-user/keys/