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@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과 동일한 대화형 쉘을 루트로 실행하십시오 . 명령이 완료된 후 성공 상태가 반환되면 원래 사용자로 명령이 실행됩니다.sudo -ssudo bashcp

쉘에 관한 한 sudo이는 특별한 쉘 구문이 아닌 일반 명령입니다. 따라서 다른 명령과 마찬가지로 &&이는 명령 구분 기호이며 왼쪽 명령이 먼저 실행되고 그 다음 오른쪽 명령이 실행됩니다(첫 번째 명령이 성공하는 경우).

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

sudo su이 변형은 동일한 작업을 수행합니다. 단, 상위 셸이 반환되고 파일이 복사되면 종료됩니다(해당 작업이 성공했다고 가정). 이 su명령은 상위 셸이 나중에 실행할 명령이 아니라 입력으로 전달한 명령을 실행하는 대화형 셸을 실행합니다.

두 개의 명령을 루트로 실행하고 첫 번째 명령이 성공한 경우에만 두 번째 명령을 실행하려면 sudo두 번 호출하면 됩니다.

sudo command1 && sudo command2

또는 sudo쉘을 호출하고 &&해당 중첩 쉘에서 연산자를 사용할 수 있습니다.

sudo sh -c 'command1 && command2'

귀하의 예에서는 하나의 명령만 실행하고 있으므로

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

sudo su기본적으로 항상 쓸모가 없습니다. 사용자를 변경하는 데 사용되기 sudo때문 입니다. 지정된 명령이 이미 루트로 실행되었으므로 su중복 됩니다. 이것은 쉘을 루트로 실행하고 .sudosusudo su

답변3

당신은 시도해야

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

관련 정보