使用 AND 命令切換到 sudo 使用者不起作用
我正在嘗試一次將 ssh 私鑰從一個使用者複製到另一個使用者。
sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/
當我一個一個地執行它們時,這一系列命令效果很好。但它顯示錯誤,
cp: cannot create regular file ‘/home/sg-user/keys/master.pem’: Permission denied
當我執行上面的命令時,它切換到 root 提示符,
root@sk-box:/home/sk#
我試過
sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/ && exit
查看命令是否在完成任務後退出 root 終端。但是exit命令沒有任何作用,提示也不是從root session中出來的……
注意:
sudo su
已配置為不使用/etc/sudoers
文件提示輸入密碼
執行命令時,它們會拆分為子程序,因此當“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/
sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/
這將執行命令
sudo su
。sudo su
以 root 身份執行互動式 shell,它基本上等同於sudo -s
orsudo bash
(如果你的 shell 是 bash)。此命令完成後,如果返回成功狀態,則以cp
原始使用者身份執行該命令。就shell而言,
sudo
是一個普通的命令,不是特殊的shell語法。因此,與任何其他命令一樣,&&
它是一個命令分隔符,首先執行其左側的命令,然後執行其右側的命令(如果第一個命令成功)。sudo su && cp /home/sk/keys/master.pem /home/sg-user/keys/ && exit
此變體的作用相同,只是它在
sudo su
返回後退出父 shell 並且文件已被複製(假設這些操作成功)。該su
命令執行一個互動式 shell,它執行您將其作為輸入傳遞的命令,而不是父 shell 稍後將執行的命令。如果你想以 root 身份執行兩個命令,只有在第一個成功時才執行第二個,你可以呼叫
sudo
兩次:sudo command1 && sudo command2
或者您可以
sudo
呼叫一個 shell 並&&
在該嵌套 shell 中使用運算符:sudo sh -c 'command1 && command2'
在你的情況下,你只執行一個命令,所以它只是
sudo cp /home/sk/keys/master.pem /home/sg-user/keys/
sudo su
基本上總是沒用的,因為sudo
和su
都是用來換使用者的。由於sudo
已經以 root 身份執行指定的命令,su
因此是多餘的。這只是以 root 身份執行 shell,您可以使用sudo su
.