web-dev-qa-db-ja.com

sudoでリモートサーバーにscp

サーバーAにファイルがあります(これはNATの後ろにあるため、直接アドレス指定できません)。ファイルは、rootに限定されたディレクトリ内のサーバーBにコピーする必要があります。私はSudo特権を持つサーバーBにアカウントを持っています。 scpコマンドの構文は何ですか?

62
Neil

まず、あなたはSudoなしで書き込み権限を持っている場所にファイルをコピーする必要があります、

scp yourfile serverb:

それからSudoを使ってファイルを移動する

ssh serverb Sudo mv yourfile /path/to/the/destination

書き込み可能な場所がない場合は、書き込み権限を持つ一時ディレクトリをユーザーのために作成してください。

ssh serverb Sudo mkdir tempdir && Sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
54
Johan

SCPでは、次の2つのステップで行う必要がありますが、rsyncを使用して1つのステップで行うことができます。

rsync --rsync-path="Sudo rsync" <LOCALFILE> USER@SERVER2:/root

注:これにはNOPASSWD Sudoの設定が必要です。 Sudoのパスワードを入力しなければならない場合は、2段階の方法が必要です。

ディレクトリをコピーするには、-rパラメータを追加する必要があります。詳細出力の場合は-v


認証情報で上記の方法を使用するには、それらをあなたの~/.ssh/configファイルに追加する必要があります。

Host SERVER2
  HostName server2.example.colm
  User USER
  #IdentityFile ~/.ssh/custom_key.pem
43

これを回避するためにsshとtarを使用することができます。

ssh -t Host 'Sudo -v'
ssh -C Host 'cd /; Sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve

これは最初にあなたのSudoタイムスタンプを更新し(必要ならパスワードを要求します。これにはtty(ssh -t)が必要です)、そして次にSudoを使ってリモートにtarballを作成しそれをローカルに抽出します。

RedHat 5の "tar"では、 " - psserve - "オプションの後に "--preserve"オプションが必要です。

19
blueyed

たとえば、Sudoコマンドでsftpを使用できます。

sftp -s 'Sudo -u REMOTE_Sudo_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@Host
4
DaniloNC

毎回Sudoのパスワードを入力する必要がある場合は、ファイルに保存できます。

echo "Enter password: "; read -s password; echo $password > password_file

そしてそれをソースファイルと一緒に送ってください。

cat password_file source_file | ssh remote_Host 'Sudo -S sponge target_file'

もっと便利なものがなければ、teeの代わりにspongeを使うことができます。

0
Jan Tojnar

まず、ファイルをSudoなしで書き込み権限のある場所にコピーする必要があります。次の2つのステップを実行できます。

ステップ1:scp filename newserver

ステップ2:ssh newserver Sudo mv filename /path/to/the/destination

詳細については scpチュートリアル を読んでください。

0
Mike Tyson