SSH経由でリモートtxtファイルをコピーしたいのですが、rootアクセス権はありません。

SSH経由でリモートtxtファイルをコピーしたいのですが、rootアクセス権はありません。

私のホストをリモートでコピーしたいのですが、うまく/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'

プログラムはteerootとして実行されるため、/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

関連情報