ฉันมีไฟล์บนเซิร์ฟเวอร์ 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
หากคุณไม่มีสถานที่ที่สามารถเขียนได้ให้สร้าง dir ชั่วคราวพร้อมสิทธิ์เขียนสำหรับผู้ใช้ของคุณ
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"?
serverb
หรือคุณต้องssh serverb
แยกต่างหากจากนั้นจึงเรียกใช้sudo ...
หลังจากลงชื่อเข้าใช้
ด้วย SCP คุณต้องทำสองขั้นตอนอย่างไรก็ตามคุณสามารถทำได้ด้วย rsync ดังนี้:
rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root
หมายเหตุ: สิ่งนี้ต้องการNOPASSWD
การกำหนดค่า sudo หากคุณต้องป้อนรหัสผ่านสำหรับ sudo คุณจำเป็นต้องใช้วิธีสองขั้นตอนนี้
ในการคัดลอกไดเรกทอรีคุณต้องเพิ่ม-r
พารามิเตอร์ และ-v
สำหรับการส่งออก verbose
หากต้องการใช้วิธีการข้างต้นพร้อมข้อมูลประจำตัวคุณจะต้องเพิ่มลงใน~/.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 จากระยะไกลและดึงข้อมูลในเครื่อง
"tar" บน RedHat 5 ต้องใช้ตัวเลือก "--preserve" เพื่อให้อยู่หลังคำสั่ง "xpsf -"
tar: Invalid replacement string
การลบ-s
ในดูเหมือนว่าจะแก้ไขได้ (ไม่แน่ใจว่าสิ่งที่คุณต้องการs
สำหรับต่อไป) ขอบคุณมาก; นี่มันเจ๋งมาก.
tty_tickets
มีการปิดการใช้งานถูกต้อง?
คุณสามารถใช้ sftp ด้วยคำสั่ง sudo ได้เช่น:
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
หากคุณไม่มีututilsมากขึ้น
ขั้นแรกคุณต้องคัดลอกไฟล์ไปยังสถานที่ที่คุณมีสิทธิ์การเขียนโดยไม่ต้องใช้ sudo คุณสามารถทำสองขั้นตอนต่อไปนี้
ขั้นตอนที่ 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 / ในเซิร์ฟเวอร์ปัจจุบัน