很多情況下一些主機無法上網,長此以往有可能讓系統內的時間混亂 ,這是一個很愁人的事情
這里我們找了一個可以通過寶塔的計劃任務或 cron 不斷將本地時間通過ssh登錄,并在登錄狀態下設置時間的方法.找了很多方案都不行 .最終采用了私鑰登錄的方案
1 使用寶塔的計劃任務(可選):
需要知道計劃任務是由誰執行的,首先需要強調的是寶塔執行計劃任務,一般是由root執行計劃任務,我們可以在計劃任務中執行下面的bash來了解我是誰.
echo $(whoami) #在計劃任務中輸入語句,并執行查看結果,很有可能是root
現在知道了我們要用root來執行計劃任務,那么登錄者比認識root,而我們的ubuntu默認root賬戶沒有啟用,但是雖然使用root賬戶來登錄遠程主機,當我們發現 root賬戶的
ssh pi的私鑰 pi@ip
仍然可以直接登錄,所以我們可以不用在root中生成鑰匙.
2 解除root登錄(可選)
一般情況下root并沒有啟用.啟用方法如下
sudo usermod root -p password
sudo passwd root #輸入root的密碼
設置好密碼之后登錄root,下一步就是生成密鑰
3 為了啟用私鑰登錄.需要在本地主機和遠程主機保持密鑰
在本地主機生成密鑰
ssh-keygen -t rsa -b 4096 #本地生成密鑰位置在 /home/用戶名/.ssh/內,如果時root賬戶 那么位置為/root/.ssh/
/home/用戶名/.ssh文件夾(或/root/.ssh文件夾)下回有兩個文件 公鑰為id_rsa.pub 私鑰為 id_rsa
將來我們要在本地文件夾(/home/用戶名/.ssh)保留私鑰不動,并將公鑰內容復制到目標主機的 /home/目標主機用戶名/.ssh/authorized_keys文件中
注意 authorized_keys是一個文件.
如果.ssh文件夾沒有可以創建新的.ssh文件夾,同時如果沒有authorized_keys文件也可以創建新的
如果authorized_keys已經存在,請將光標移動到末尾 并將公鑰復制進去到遠程的/home/目標主機名.ssh/authorized_keys中
這個時候基本上登錄就不需要密碼了
布局密鑰基本思路:
將賬戶生成的位于/home/本地用戶名/.ssh內的id_rsa.pub里的內容復制出來
將內容放到遠程主機的/home/用戶名/.ssh/authorized_keys里就可以實現無密碼登錄
cat /root/.ssh/id_rsa.pub
#復制id_rsa.pub的內容
ssh 用戶名@ip
#登錄
vim /home/用戶名/.ssh/authorized_keys
#換行粘貼內容或內容為空時直接粘貼
#保存
:wq
#退出ssh
exit
4. 在寶塔上設置計劃任務
在寶塔上找到計劃任務,并將一下bash代碼復制進去,并修改登錄名和密碼
#!/bin/bash# 遠程主機的信息
REMOTE_HOST="192.168.5.83" #登錄目標主機
REMOTE_USER="pi" #登錄時使用的用戶名
REMOTE_PASSWORD="pi" #用來執行sudo時填入密碼
REMOTE_KEY="/home/pi/.ssh/id_rsa" #這里是本地保存的私鑰,用來登錄用的. # 定義要設置的時間(可選,根據您的需求進行調整)
# 例如,設置時間為 "2023-10-23 12:00:00"(請確保格式正確)
CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
echo $CURRENT_TIME
# 使用 SSH 連接到遠程服務器并執行命令
ssh -i "$REMOTE_KEY" "$REMOTE_USER@$REMOTE_HOST" "sudo -S date -s '$CURRENT_TIME' <<EOF
$REMOTE_PASSWORD
EOF
"# 檢查 SSH 命令的退出狀態
if [ $? -eq 0 ]; thenecho "Time setting command executed successfully."
elseecho "Error executing time setting command."
fi
此處需要修改
REMOTE_HOST=“192.168.5.83”
REMOTE_USER=“pi”
REMOTE_PASSWORD=“pi”
REMOTE_KEY=“home/pi/.ssh/id_rsa”
為你需要的信息即可.