따라서 문제 없이 localhost에서 다음 명령을 수동으로 실행할 수 있습니다. 이 명령은 원격 호스트의 시간을 로컬 호스트의 시간과 동기화합니다.
ssh [email protected] "date --set \"$(date -u +"%Y-%m-%d %H:%M:%S")\""
(두 번째는 date
로컬 호스트의 현재 시간을 가져오고, 첫 번째는 date
원격 호스트의 시간을 설정합니다.)
그러나 이 프로세스를 자동화해야 하므로(C++ 코드에서 아래 참조) 비밀번호를 입력하는 데 도움을 주어야 하므로 sshpass
다음과 같은 내용이 있습니다.
sshpass -p \'xxxxxxx\' ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] \"date --set \"$(date -u +\"%Y-%m-%d %H:%M:%S\")\"\"
하지만 이 명령은 작동하지 않습니다. (문제 중 하나는 date
명령의 두 번째 것이 localhost에서 실행되지 않는다는 것입니다. 그러나 그래야 합니다)
어떻게 작동하게 할 수 있나요?
ntp
참고: 원격 호스트에서는 사용할 수 없습니다.
편집하다:
그래서 명령을 다음과 같이 업데이트했습니다.
TIME=$(date -u +\"%Y-%m-%d %H:%M:%S\"); sshpass -p 'xxxxxxxx' ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] date --set \"$TIME\"
하지만 여전히 작동하지 않습니다.
이 cmd를 C++ 코드로 실행해야 하므로 전체 코드는 다음과 같습니다.
system("TIME=$(date -u +\"%Y-%m-%d %H:%M:%S\"); sshpass -p 'xxxxxxx' ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] date --set \"$TIME\"");
답변1
단순화해야합니다.
ssh [email protected] date --set @$(date -u +%s)
$(date +%s)
1970년 1월 1일 이후의 초 수를 가져오고 @
날짜 형식이 1970년 1월 1일 이후의 초 수일 것으로 예상하는 날짜를 알려줍니다.
편집: 주석에서 이것이 문자열에 있어야 하며 .cpp code를 사용하여 cpp 코드에서 실행될 것이라고 언급했습니다 system()
. 그렇다면 이를 쉘에 time()
전달하는 대신 문자열을 구성하는 데 사용할 수 있습니다.$(date +%s)