sudoよりもroot以外の権限を持つリモートサーバーにローカルファイルをコピーしますか?

sudoよりもroot以外の権限を持つリモートサーバーにローカルファイルをコピーしますか?

私はこのようなことをしたい:

scp local_file remote_server:/some_directory

ただし、/some_directoryの権限を取得するには、を呼び出す必要がありますsudo。同様の質問がここで何度も要求されたことを知っていますが、ほとんどの回答はパスワードキャッシュを使用するか(sudo何らかの理由で2回の連続呼び出しでは機能しないようですsshsudoSSHをrootとして許可できます)。

後者の場合、両方のソリューションは安全に見えないため、ルートになる必要がないため、sudoシステムを再構成できないとします。この場合、単にファイルをコピーするにはどうすればよいですか?

これまでに試したことは次のとおりです。

( 
read -s -p 'Enter password: ' pass; 
echo $pass ; 
tar cf - local_file ) | ssh -t -t remote_server 'sudo tar -C /some_directory' )

もっと良い方法がありますか?

ベストアンサー1

私はこの問題を解決するためのエレガントな方法を見つけました名前付きパイプ。アイデアは、リモート側でtarコマンドを実行してこれを行うことです。先入選出一般ユーザーがソケットを読むことができるようにします。

ここに例があります。リモート側では、まずソケットを作成します。

remote$ sudo -s 
remote# mkfifo -m 600 /home/anarcat/tmpfifo
remote# chown anarcat /home/anarcat/tmpfifo

ローカル側では、すでにソケットから読み取りを開始できます。

local$ ssh example.net "cat tmpfifo" | pv -s 2G | tar xfz -

(これpv -s 2G |は素晴らしい進行状況バーを得るための完全なオプションです)。パイプビューア.)

その後、リモート側で書き込みを開始できます。

remote# tar cfz /home/anarcat/tmpfifo files

これはfilesSSH接続を介して複製されます。もちろん、リモートサーバーから直接tarballを作成してユーザーがアクセスできるようにすることもできますが、これを行うにはアーカイブのすべてのスペースが必要なため、使用できない場合があります。

これを完了したら、fifo簡単なファイルで削除できます。

remote$ rm /home/anarcat/tmpfifo

おすすめ記事