私のホストをリモートでコピーしたいのですが、うまく/etc/hosts
いきません。ルートSSHアクセスが作業をより簡単にすることはわかっていますが、IMHOルートSSHアクセスは少し危険です。
cat /etc/hosts|ssh samba2 "sudo su -c "sh -c cat > /etc/hosts""
私のユーザーはアクセス権を拒否され、コマンドは失敗しますsudo
。
解決策はありますか?
答え1
cat /etc/hosts | ssh samba2 'sudo tee /etc/hosts > /dev/null'
プログラムはtee
rootとして実行されるため、/etc/hosts
標準入力を使用して上書きできます。tee's
私たちがそれを見る必要がないか見たくないので、stdoutを捨ててください。
そして、珍しい参照のために難題を超える必要はありません。
>>
これは、上書きするのではなく追加(で示すように)する必要がある場合に機能しますtee -a
。
答え2
ssh -tt samba "sudo bash -s" <<EOF
echo "$(cat /etc/hosts)" >/etc/hosts
exit 0
EOF
これにより、セッションが開き、heredocがスクリプトに渡された昇格されたbashが実行されます。 -ttパラメーターは、sshが擬似ttyを割り当てるためのものです。それ以外の場合、sudoは文句を言います。 heredocでは、コマンド置換はローカルで行われ、全文が実行されます。遠くから聞こえてくるエコーを得るだろう。
編集:コマンドの置き換えについて引用します。編集2:スクリプトに終了を追加しました。それ以外の場合は、 bash は引き続きコマンドを待ちます。
答え3
指定されたリダイレクトは機能しませんが、次の2つの手順で実行できます。
scpを使用したファイルのコピー
sudoを使用してリモートコンピュータのファイルを更新する
例えば
scp -p /etc/hosts samba2:
ssh -t samba2 sudo cp -f -v -p ~/hosts /etc/hosts
ファイルのコピー権限を維持しようとします。使用しているシステムに応じて、この-p
オプションはファイルの所有権を保持しようとする可能性があります。この場合は、以下を使用してください。
--preserve=mode,timestamps
スクリプトに問題がある場合(復元せずにファイルを消去できます)、置換は/etc/hosts
最善の選択ではありません。/etc/hosts