透過 root ssh 連線自動複製檔案的安全方法

透過 root ssh 連線自動複製檔案的安全方法

目前,我的家庭伺服器上運行著一些不同的服務,為了簡單起見,我有一個虛擬機器透過 certbot 管理證書,然後使用 SCP 在網路上複製它們。

ssh 連線是受金鑰保護的,但由於我是自動執行的,因此金鑰本身不需要密碼,這顯然不理想。

金鑰僅儲存在管理 certbot 的虛擬機的 root 帳戶中,但我仍然希望有一個選項,其中腳本可以複製文件,而無需本質上使用不安全的方法來對網路上的其他系統進行 root 訪問,如果有人獲得了對其中之一的存取權限。

有沒有辦法只允許某些命令透過 ssh 連線傳遞,而不允許它打開 shell 會話,或者任何人都可以想出另一種方法來在我的每週 cron 作業上複製文件,而不會留下選項有人可以ssh 到我的其他機器嗎?

我的路由器僅在周六晚上為使用者啟用 certbot,這允許我的虛擬機器透過 ssh 登入並執行腳本來停用封鎖連接埠 80 的防火牆規則,執​​行 certbot renew 命令,再次啟用防火牆規則並停用 certbot 用戶。我對此感到滿意,因為每週最多只有 15 分鐘的時間段啟用路由器用戶。

問題在於憑證的複製,顯然,以 root 身分執行該操作時,帳戶始終處於活動狀態。

#!/bin/bash
ssh [email protected] "/system script run certbotenable"
#ufw allow 80
certbot renew
#ufw delete allow 80
systemctl restart apache2
ssh [email protected] "/system script run certbotdisable"
scp /etc/letsencrypt/live/sazed.mydomain.com/cert.pem root@sazed:/etc/pve/local/pveproxy-ssl.pem
scp /etc/letsencrypt/live/sazed.mydomain.com/privkey.pem root@sazed:/etc/pve/local/pveproxy-ssl.key
scp /etc/letsencrypt/live/rashek.mydomain.com/cert.pem root@rashek:/root/ssl/fullchain.pem
scp /etc/letsencrypt/live/rashek.mydomain.com/privkey.pem root@rashek:/root/ssl//privkey.key
ssh root@sazed "service pveproxy restart"

答案1

您可以產生多個 ssh 金鑰對。

在遠端伺服器上,您可以使用authorized_keys檔案中的進階選項並為每個公鑰新增限制。這允許您對使用特定密鑰對授予的存取登入數量新增限制。

請參閱中的authorized_keys檔案格式說明https://www.freebsd.org/cgi/man.cgi?sshd(8)了解選項及其含義。

例如,有用的選項command=限制僅存取單一命令/可執行檔/腳本

相當典型的是強制使用internal-sftp;那就只允許使用 sftp 進行檔案傳輸。

from=限制接受連線的來源 IP

類似地,/etc/ssh/sshd_config您可以使用指令為 root 登入設定附加要求Match,即當您仍需要允許所有常規使用者密碼登入時,您可以使用它來設定 root 只接受基於公鑰的登入

# /etc/ssh/sshd_config
#here go defaults for all connections/users
PasswordAuthentication yes
PubkeyAuthentication yes
...
# Use Match directives to override default settings and specify specific settings
# for users, groups, hosts 
# https://man.openbsd.org/sshd_config#Match
Match User root
    PasswordAuthentication no
   

當然,您可以透過配置拉取而不是推送方法來避免整個根/特權帳戶問題。

相關內容