원격 Linux 호스트의 시간을 로컬 호스트의 시간과 동기화하는 방법

원격 Linux 호스트의 시간을 로컬 호스트의 시간과 동기화하는 방법

따라서 문제 없이 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)

관련 정보