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 777biasanya cara yang salah untuk melakukannya. Pertimbangkan apa yang bisa terjadi jika orang lain masuk dan tahu Anda akan menjalankan kode ini.
ssh sudotidak bekerja untuk saya - mengeluh "tidak ada tty sekarang dan tidak ada program askpass yang ditentukan"?
serverbatau Anda perlu ssh serverbsecara 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 NOPASSWDkonfigurasi sudo. Jika Anda harus memasukkan kata sandi untuk sudo, maka diperlukan dua langkah.
Untuk menyalin direktori, Anda perlu menambahkan -rparameter. Dan -vuntuk keluaran verbose.
Untuk menggunakan metode di atas dengan kredensial, Anda perlu menambahkannya ke ~/.ssh/configfile Anda , mis
Host SERVER2
HostName server2.example.colm
User USER
#IdentityFile ~/.ssh/custom_key.pem
sudo: sorry, you must have a tty to run sudodiperbaiki 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 -stampaknya untuk memperbaikinya (tidak yakin apa yang Anda butuhkan suntuk itu). Terimakasih banyak; ini luar biasa.
tty_ticketsharus 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 teedaripada spongejika 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