ルート SSH 接続を介してファイルを自動的にコピーする安全な方法

ルート SSH 接続を介してファイルを自動的にコピーする安全な方法

現在、自宅のサーバー上でいくつかの異なるサービスを実行しており、簡単にするために、単一の VM で certbot 経由で証明書を管理し、SCP を使用してネットワーク経由で証明書をコピーしています。

SSH 接続はキーで保護されていますが、自動化して実行しているため、キー自体にはパスワードは必要ありませんが、これは明らかに理想的ではありません。

キーは、certbot を管理する VM のルート アカウントにのみ保存されますが、誰かがネットワーク上の他のシステムのいずれかにアクセスした場合に、基本的に安全でない方法でルート アクセスすることなく、スクリプトでファイルをコピーできるオプションが必要です。

シェル セッションを開くことを許可せずに、特定のコマンドのみを ssh 接続経由で渡すことを許可する方法はありますか。または、誰かが他のマシンに ssh で接続できないように、毎週の cron ジョブでファイルをコピーする別の方法を思いつく人はいますか。

私のルーターは、土曜日の夕方にのみ certbot のユーザーを有効にします。これにより、VM が ssh で接続して、ポート 80 をブロックするファイアウォール ルールを無効にするスクリプトを実行し、certbot 更新コマンドを実行し、ファイアウォール ルールを再度有効にして、certbot ユーザーを無効にすることができます。ルーター ユーザーが有効になる時間は毎週最大 15 分しかないため、これで十分です。

問題は証明書のコピーです。明らかに、ルートとして実行されるため、アカウントは常にアクティブです。

#!/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を使用してルートログインの追加要件を設定できます。Matchつまり、すべての通常ユーザーにパスワードログインを許可する必要がある場合は、ルートに対して公開キーベースのログインのみが受け入れられるように設定できます。

# /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
   

もちろん、プッシュ アプローチではなくプル アプローチを構成することで、ルート/特権アカウントの問題全体を回避できます。

関連情報