한 사용자의 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 -s
sudo bash
cp
쉘에 관한 한 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
중복 됩니다. 이것은 쉘을 루트로 실행하고 .sudo
su
sudo su
답변3
당신은 시도해야
sudo cp /home/sk/keys/master.pem /home/sg-user/keys/