7
11月
2025
15:50

通过 SSH 在智能手机上使用 GPS 设置计算机时间

7 11月 2025 15:50

此方法可提供高达 2-3 秒的准确度,因为通过 ssh 进行请求-响应需要时间。

简介。 总体思路

如果没有4G数据传输,设置日期和时间是一项紧急任务。

此方法使用 GPS 卫星:

  • 首先,智能手机通过 GPS/GLONASS 卫星进行同步。
  • 然后电脑通过ssh连接到智能手机,并根据智能手机时钟设置操作系统中的时间(但PC时钟最终会因为请求-响应而滞后2-3秒)。

为什么不使用 NTP 或 SNTP 服务器?

  • ВAndroid 用户可以使用高于 1024(含)的端口,因此在 Android 中不可能运行 NTP 服务器使其端口变为 123。所有 Linux 实用程序都连接到端口 123 进行时间同步。

Поэ我使用了另一个选项 - SSH 具有高于 1023 的任意端口。在本例中,使用 SSHdaemon 建议的端口 - 8022,但它可以是 1024-49151 范围内的任何端口。

检查端口是否正在侦听(打开):

nmap 192.168.1.57 -p 1025

应该是这样的:
于 2025 年 11 月 7 日 16:16 MSK 启动 Nmap 7.80 ( https://nmap.org )
Nmap 扫描报告... (192.168.1.57)
主机已启动(0.45 秒延迟)。

港口国服务
1025/tcp 打开 NFS 或 IIS

Nmap 完成:0.77 秒内扫描 1 个 IP 地址(1 个主机)

我在 Android 中使用该应用程序作为 SSH 服务器 https://play.google.com/store/apps/details?id=com.daemon.ssh

通过密码访问 SSH。

移动 Wi-Fi 热点或 Wi-Fi 路由器,其中 PC 和智能手机位于同一本地网络。

解决方案

这段代码是我在Linux Mint和Android上调试的:

sudo date +"%Y-%m-%d %T" --set "$(echo date +'%Y-%m-%d_%T' | sshpass -fpwd ssh -q 192.168.1.57 -p 8022 -l user | sed -e 's/_/ /')" 

哪里
setpass - 使用密码而不是密钥的实用程序,
pwd - 文件名。 它存储 ssh 密码。 pwd 可以根据文件名替换为其他文本,例如“1”或“a”。
ssh - 用于连接到 ssh 服务器的命令行实用程序,
8022 - Android 操作系统中的 ssh 服务器端口,
-l user - ssh用户登录名,
q - 安静的 ssh 模式,不发出不必要的消息,
192.168.1.57 - SSH 服务器的 IP 地址(适用于 Android),
sed - 用空格替换下划线,

date --set - 设置本地计算机上的时间的命令。

在运行该实用程序之前,请禁用网络上的 NTP 时间同步:

timedatectl set-ntp false
timedatectl

工作原理说明

在互联网上的论坛上,我发现了一种通过 SSH 控制台设置 PC 时间的简化方法 - Secure Socket Shell,通过它执行命令 date 在远程 PC 上。

选项如下:

date --set="$(ssh 用户@服务器日期)" 

ssh 用户@服务器 sudo 日期 -s @`( date -u +"%s" )` 

日期 +%Y%m%d%T -s "`ssh user@server 'date "+%Y%m%d %T"'`"

日期 --set="$(ssh user@server 'date -u')"

我开始调试“date --set=”命令的第一个版本。

在 Linux 中从命令行手动设置时间:

sudo date +"%Y-%m-%d %H:%M:%S" --set "2025-11-07 14:40:00" 

在 Android 或 Linux 中以所需格式显示当前日期和时间

date +"%Y-%m-%d %H:%M:%S" 

(结果:2025-11-07 16:09:45)。

从 Linux 连接到 SSH 服务器

手动连接并请求密码:

ssh user@192.168.1.57 -p 8022

ssh 192.168.1.57 -p 8022 -l user

其中 user 是授予访问权限的服务器上 ssh 用户的登录名,
192.168.1.57 - SSH 服务器的 IP 地址,
8022 是 SSH 服务器使用的 TCP 端口。

使用密码自动连接到 ssh 服务器:

sshpass -fpwd ssh -q 192.168.1.57 -p 8022 -l user

其中 pwd 是当前目录中包含 ssh 密码的文本文件。

(您可以使用明文密码 -ppassword 代替 -fpwd,我不推荐这样做。-f 和文件名之间或 -p 开关和密码之间没有空格。请参阅帮助 man sshpass )。

缺点

使用这种方法,PC时钟落后世界时间2-3秒。

启用 NTP(如果互联网可用)

如果出现 Internet,请启用本机 Linux 时间同步(在基于 SystemD 的系统上):

timedatectl set-ntp true

查看时间同步结果:

timedatectl

检查PC时间与世界时间的偏差

检查电脑时钟的网站: https://time.is



相关出版物