Saya punya file di server A (yang ada di belakang NAT jadi tidak langsung dialamatkan). File perlu disalin ke server B dalam direktori yang terbatas pada root. Saya memiliki akun di server B dengan hak sudo. Apa sintaks untuk perintah scp?
Saya punya file di server A (yang ada di belakang NAT jadi tidak langsung dialamatkan). File perlu disalin ke server B dalam direktori yang terbatas pada root. Saya memiliki akun di server B dengan hak sudo. Apa sintaks untuk perintah scp?
Jawaban:
Pertama, Anda perlu menyalin file ke tempat di mana Anda memiliki akses tulis tanpa sudo,
scp yourfile serverb:
Kemudian pindahkan file menggunakan sudo
ssh serverb sudo mv yourfile /path/to/the/destination
Jika Anda tidak memiliki tempat yang bisa ditulisi, buat direktori sementara dengan izin menulis untuk pengguna Anda.
ssh serverb sudo mkdir tempdir && sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination
chmod 777
biasanya cara yang salah untuk melakukannya. Pertimbangkan apa yang bisa terjadi jika orang lain masuk dan tahu Anda akan menjalankan kode ini.
ssh sudo
tidak bekerja untuk saya - mengeluh "tidak ada tty sekarang dan tidak ada program askpass yang ditentukan"?
serverb
atau Anda perlu ssh serverb
secara terpisah, kemudian jalankan sudo ...
setelah login.
Dengan SCP, Anda harus melakukannya dalam dua langkah, namun, Anda dapat melakukannya bersamaan dengan rsync sebagai berikut:
rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root
Catatan: Ini memang membutuhkan NOPASSWD
konfigurasi sudo. Jika Anda harus memasukkan kata sandi untuk sudo, maka diperlukan dua langkah.
Untuk menyalin direktori, Anda perlu menambahkan -r
parameter. Dan -v
untuk keluaran verbose.
Untuk menggunakan metode di atas dengan kredensial, Anda perlu menambahkannya ke ~/.ssh/config
file Anda , mis
Host SERVER2
HostName server2.example.colm
User USER
#IdentityFile ~/.ssh/custom_key.pem
sudo: sorry, you must have a tty to run sudo
diperbaiki oleh -e "ssh -tt"
.
-e "ssh -tt"
, saya mengerti protocol version mismatch -- is your shell clean?
. Adakah petunjuk tentang cara memperbaikinya?
Anda dapat menggunakan ssh dan tar untuk mengatasi ini:
ssh -t host 'sudo -v'
ssh -C host 'cd /; sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve
Ini pertama kali memperbarui stempel waktu sudo Anda (meminta kata sandi jika perlu, yang memerlukan tty ( ssh -t
)), dan kemudian menggunakan sudo untuk membuat tarball dari jarak jauh dan mengekstraknya secara lokal.
"tar" pada RedHat 5 membutuhkan opsi "--preserve" untuk muncul setelah perintah "xpsf -".
tar: Invalid replacement string
, menghapus -s
tampaknya untuk memperbaikinya (tidak yakin apa yang Anda butuhkan s
untuk itu). Terimakasih banyak; ini luar biasa.
tty_tickets
harus dinonaktifkan, benar?
Anda dapat menggunakan sftp dengan perintah sudo, misalnya:
sftp -s 'sudo -u REMOTE_SUDO_USER /usr/libexec/openssh/sftp-server' REMOTE_USER@HOST
Jika Anda perlu mengetikkan kata sandi untuk sudo setiap saat, Anda dapat menyimpannya ke file:
echo "Enter password: "; read -s password; echo $password > password_file
dan kemudian mengirimkannya bersama dengan file sumber.
cat password_file source_file | ssh remote_host 'sudo -S sponge target_file'
Anda dapat menggunakan tee
daripada sponge
jika Anda tidak memiliki lebih banyak util.
Pertama, Anda perlu menyalin file ke tempat di mana Anda memiliki akses tulis tanpa sudo, Anda dapat melakukan dua langkah berikut.
Langkah 1:
scp filename newserver
Langkah 2:
ssh newserver sudo mv filename /path/to/the/destination
untuk informasi lebih lanjut baca tutorial scp
current server $ sudo scp username@server:source/path/filename /tmp/
Ini akan menyalin file tertentu dari sumber ke / tmp / di server saat ini