1行でサーバー間で保護されたファイルをコピーしますか?

1行でサーバー間で保護されたファイルをコピーしますか?

squid.confあるサーバーから別のサーバーにコピーしたいです。

  • サーバーは互いに通信しません。私のワークステーションを確認したいです。
  • 両方のサーバーにこのファイルがあるため、ターゲットは上書きされます。
  • これらのファイルには600権限があり、ルートが所有しています。
  • SSHを介したルートログインが無効になっています(PermitRootLogin no)。
  • 設定ガイドの一部になりますので、可能であれば一行で作成したいと思います。

やるわ

ssh source 'tar czpf - -C /etc/squid/ squid.conf' | \
    ssh target 'tar xzpf - -C /etc/squid/'

サーバー間でファイルをコピーし、権限を維持します。ただし、この場合、「権限が拒否されました」というメッセージが表示されます。

私もこれができることを知っています:

ssh -t source 'sudo cat /etc/squid/squid.conf'

これ-tにより、sudoはファイルの内容を出力する前に管理者パスワードを要求できます。

問題は、これらの技術を組み合わせて各サーバーにsudoパスワードを要求し、ファイルを宛先に転送する方法がわからないことです。可能ですか?

修正する:これが私が思いつく最善の方法です:

ssh -t source 'sudo tar czf /tmp/squid.tgz -C /etc/squid squid.conf' && \
ssh source 'cat /tmp/squid.tgz' | \
    ssh target 'cat >/tmp/squid.tgz' && \
ssh -t source 'sudo rm /tmp/squid.tgz' && \
ssh -t target \
    'sudo tar xzf /tmp/squid.tgz -C /etc/squid && sudo rm /tmp/squid.tgz'

それをラインと呼ぶのはストレッチのようです。私はセットアップガイドでこれを別々の段階に分ける必要があると思いました。

ベストアンサー1

sudoを使用してsshに接続するよりも、sshを使用してsshに接続する方が簡単です。したがって、SSHサーバーの設定を変更するのは問題ありません。各サーバーのルートに対してSSHを開くことをお勧めしますが、localhostでのみ開くことをお勧めします。Match次のセクションを使用してこれを実行できますsshd_config

PermitRootLogin no
Match Host localhost
    PermitRootLogin yes

その後、リモート・ユーザーからローカル・ユーザーに、ローカル・ユーザーから root キー・ベースの認証チェーンを設定できます。それでも認証トレース機能があるので、ログを介して誰がrootとしてログインしたのかがわかります。

サーバーにルートとして接続するには、~/.ssh/config次のようにエイリアスを定義します。

Host server-root
HostName server.example.com
User root
ProxyCommand "ssh server.example.com nc %h %p"

これを使うとこだわるなら、端末で読み込みにこだわり(あなたのアカウントに対するチケットがあっても)、一般的なファイルコピー方法(scp、sftp、rsync)のどれも使用しないので、別途sudoのコマンドが必要だと思います。sudoリモート端末とのやり取りをサポートします。

sshとsudoを使用すると、提案するコマンドを簡素化できます。両方で sudo が絶対パスワードを要求しないように設定した場合は、一度実行してパスワードの要件を完了し、再度実行してファイルをコピーできます。 (パスワードプロンプトが邪魔になるため、簡単にファイルをコピーすることはできません。)

ssh -t source 'sudo true'
ssh -t target 'sudo true'
ssh -t source 'sudo cat squid.conf' |
ssh -t target 'sudo tee /etc/squid/squid.conf'

¹がなければNOPASSWD尋ねません。

おすすめ記事