サーバーAにファイルがあります(これはNATの後ろにあるため、直接アドレス指定できません)。ファイルは、rootに限定されたディレクトリ内のサーバーBにコピーする必要があります。私はSudo特権を持つサーバーBにアカウントを持っています。 scpコマンドの構文は何ですか?
まず、あなたは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
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
これを回避するために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"オプションが必要です。
たとえば、Sudoコマンドでsftpを使用できます。
sftp -s 'Sudo -u REMOTE_Sudo_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@Host
毎回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
を使うことができます。
まず、ファイルをSudoなしで書き込み権限のある場所にコピーする必要があります。次の2つのステップを実行できます。
ステップ1:scp filename newserver
ステップ2:ssh newserver Sudo mv filename /path/to/the/destination
詳細については scpチュートリアル を読んでください。