サーバーAにファイルがあります(NATの背後にあるため、直接アドレス指定できません)。ファイルは、ルートに制限されたディレクトリのサーバーBにコピーする必要があります。サーバーBにsudo特権を持つアカウントがあります。scpコマンドの構文は何ですか?
サーバーAにファイルがあります(NATの背後にあるため、直接アドレス指定できません)。ファイルは、ルートに制限されたディレクトリのサーバーBにコピーする必要があります。サーバーBにsudo特権を持つアカウントがあります。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
chmod 777
通常それは間違った方法です。他の誰かがログインし、このコードを実行しようとしていることを知っていた場合に何が起こるか考えてください。
ssh sudo
私のために動作しません-「ttyが存在せず、askpassプログラムが指定されていません」と文句を言いますか?
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
sudo: sorry, you must have a tty to run sudo
修正しました -e "ssh -tt"
。
-e "ssh -tt"
、私は得るprotocol version mismatch -- is your shell clean?
。それを修正する方法についてのヒントはありますか?
これを回避するには、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」では、「xpsf-」コマンドの後に「--preserve」オプションが必要です。
tar: Invalid replacement string
、を削除する-s
と修正されるようです(s
とにかく何が必要かはわかりません)。どうもありがとう; これはすごい。
tty_tickets
無効にする必要がありますか?
たとえば、sudoコマンドでsftpを使用できます。
sftp -s 'sudo -u REMOTE_SUDO_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@HOST
最初に、sudoを使用せずに書き込みアクセスできる場所にファイルをコピーする必要があります。次の2つの手順を実行できます。
ステップ1:
scp filename newserver
ステップ2:
ssh newserver sudo mv filename /path/to/the/destination
詳細については、scpチュートリアルを参照してください。
current server $ sudo scp username@server:source/path/filename /tmp/
特定のファイルをソースから現在のサーバーの/ tmp /にコピーします