使用 AND 命令切换到 sudo 用户不起作用

使用 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

查看命令在完成任务后是否退出根终端。但是 exit 命令没有任何效果,提示也不会从 root 会话中出来......

注意: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 susudo su以 root 身份运行交互式 shell,它基本上相当于sudo -sor sudo 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 运行您作为输入传递给它的命令,而不是父 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基本上总是没用的,因为sudosu都是用来改变用户的。由于sudo已经以 root 身份运行指定的命令,su因此是多余的。这只是以 root 身份运行 shell,您可以使用sudo su.

答案3

你应该试试

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

相关内容