sudo機能をbashシェルのターゲットディレクトリ/ファイルに拡張できますか?

sudo機能をbashシェルのターゲットディレクトリ/ファイルに拡張できますか?

ローカルネットワークには2つのUbuntuサーバー(12.04.5 LTSと16.04.1 LTS)があります。私は両方のサーバーの管理者であり、そのサーバーのスーパーユーザーになることができます。各サーバーがAとBであると仮定し、サーバーAにログインします。

AのファイルをBのディレクトリにコピーするには、そのファイルを配置するためにBのroot権限が必要です。どうすればいいですか?

私の試みは次のとおりですが、サーバーBに権限がないため、成功しませんでした。

sudo scp /foobar/foo/bar.txt user@serverB:/bar.txt
scp: /bar.txt: Permission denied

sudo権限は、宛先ディレクトリではなくソースディレクトリの権限にのみ影響します。

もちろん、ターゲットディレクトリの権限を適切に変更すると、権限なしエラーなしでファイルをコピーできます。しかし、ファイルをコピーするたびに権限を変更するのはやや面倒です。

さらに、Ubuntuのデフォルト設定では、ルートが両方のサーバーにログインすることはできません。

もし良い方法知っていれば教えてください。私はbashシェルを使います。

答え1

通常のユーザー(rootではない)で元のシステムのファイルを読み取ることができる場合は、push scpの代わりにpull scpを使用することを検討してください。

serverB:~$ sudo scp user@serverA:/foobar/foo/bar.txt /bar.txt

ソースコンピュータからファイルを読み取れない場合は、上記の2つの手順を実行する必要があります。複数のコンピュータでsudoを動作させることはできません。

答え2

うーん…サーバーBにディレクトリを作成するのはどうですか?いいえ高い権限が必要な場合は、ファイルをその場所にコピーし、サーバーBにログインして目的の場所に移動します。キス

答え3

エクスパンダで使用できるrsyncように、次のガイドラインに従ってください。sudo

  1. rsync パスを探します。which rsync
  2. /etc/sudoers ファイルを編集します。sudo visudo
  3. ログインに使用するユーザーのログイン名を含む<username> ALL=NOPASSWD:<path to rsync>行を追加します。このユーザーはsudoを使用できる必要があります。usernamersync

次に、ソースマシンでsudo rsync次のものを使用する必要があることを指定します。

rsync ... --rsync-path="sudo rsync" ...

ターゲットマシンでそれを使用しないと、NOPASSWD次のメッセージが表示されます。

sudo: no tty present and no askpass program specified

関連情報