squid.conf
をコピーしたい あるサーバーから別のサーバーへ。
- サーバーは相互に通信しません。ワークステーションを調べたいのですが。
- 両方のサーバーにファイルがあるため、ターゲット上で上書きされます。
- ファイルには
600
があります 許可を得て、rootが所有します。 - sshを介したrootログインが無効になっています(
PermitRootLogin no
。 - セットアップガイドの一部になるので、可能であれば1行で実行したいと思います。
私はすることを知っています
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'
これをワンライナーと呼ぶのは一筋縄ではいかないようです。セットアップガイドの個別の手順に分解するだけだと思います。
承認された回答:
sshをsshでチェーンするよりも、sshをsshでチェーンする方が簡単です。したがって、sshサーバー構成を変更しても問題ありません。各サーバーのルートに対してsshを開くことをお勧めしますが、ローカルホストからのみです。これは、Match
を使用して行うことができます sshd_config
の句 :
PermitRootLogin no
Match Host localhost
PermitRootLogin yes
次に、リモートユーザーからローカルユーザーへ、およびローカルユーザーからrootへのキーベースの認証チェーンを設定できます。まだ認証証跡があるので、ログには誰がrootとしてログインしたかが示され、認証手順はsudoが関与した場合と同じです。
ルートとしてサーバーに接続するには、~/.ssh/config
でエイリアスを定義します このように:
Host server-root
HostName server.example.com
User root
ProxyCommand "ssh server.example.com nc %h %p"
sudo
の使用を主張する場合 、sudo
のように、個別のコマンドが必要になると思います 端末からの読み取りを要求します(アカウントのチケットがある場合でも)¹。通常のファイルコピー方法(scp、sftp、rsync)はいずれも、リモート端末との対話をサポートしていません。
sshとsudoに固執することで、提案されたコマンドを単純化することができます。どちらの側でも、パスワードを再度要求しないようにsudoを設定している場合は、一度実行してパスワード要件を克服し、もう1回実行してファイルをコピーできます。 (パスワードプロンプトが邪魔になるため、ファイルを直接簡単にコピーすることはできません。)
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
がない場合 、しかしそれならあなたはこれを求めないでしょう。