メインコンテンツへスキップ

sudo権限が必要なファイルを一時ファイルなしで別サーバーに転送する方法

··1 分·
Ssh Tar Copy
Makoto Morinaga
著者
Makoto Morinaga
技術メモ、コーディング、環境構築のための個人ノート。
目次

tarsshを組み合わせることで、一時ファイルを作成せずに、sudo権限が必要なファイルを別のサーバーへ転送できます。 転送元サーバの容量が足りない時に実施しましたので、メモします。

基本的な手順
#

  1. 転送元サーバーで以下のコマンドを実行:

    Terminal
    sudo tar czvf - /path/to/source/file | ssh username@targetserver 'cat > /path/to/destination/file.tar.gz'

    sudo tarでファイルをアーカイブし、そのままsshを使って別サーバーに転送します。

  2. 転送先のサーバーで以下のコマンドを実行:

    Terminal
    sudo tar xzvf /path/to/destination/file.tar.gz -C /final/path/to/destination

    tarを使ってアーカイブを展開し、元のファイルを復元します。

ワンライナーで実行
#

以下のワンライナーを使うことで、ファイルの圧縮、転送、展開を1つのコマンドで実行できます。

Terminal
sudo tar czvf - /path/to/source/file | ssh username@targetserver 'sudo tar xzvf - -C /final/path/to/destination'

この方法では転送先のサーバー上でsudoを使ってtarを展開するため、sudoパスワードの入力が求められる可能性があります。 自動化を検討している場合は、パスワードなしのsudo設定を一時的にする等行います。

注意点
#

tar展開時の権限
#

tarでアーカイブを展開する際にsudoが必要かどうかは、展開先のディレクトリのパーミッションに依存します。

  • 一般ユーザーに書き込み権限があるディレクトリならsudoは不要
  • ルートユーザーや特定のグループのみが書き込み可能なディレクトリならsudoが必要

また、元のファイルの所有者がrootであり、それを保持したい場合や、システムディレクトリ(例:/etc/var)に展開する場合もsudoが必要になります。

tar-pオプションについて
#

tar-p--preserve-permissions)オプションを使うと、元のファイルやディレクトリのパーミッション(所有者情報やアクセス権)を保持したまま展開可能です。

もし、ファイルやディレクトリのオーナー、グループ、アクセス権をそのまま維持したい場合は、-pオプションを付けて展開してください。 この方法を使うことで、意図しないパーミッションの変更を防ぐことができます。

関連記事

~/.ssh/configによるssh接続の管理
··1 分
Arch-Linux Ssh
sshの鍵認証設定
··2 分
Arch-Linux Ssh
sshの基本設定
··1 分
Arch-Linux Ssh