วิธีการคัดลอกไฟล์โดยไม่ใช้ scp ภายในเซสชัน ssh?


55

ฉันเข้าสู่ระบบด้วย ssh และไม่มี scp อยู่ทั้งสองระบบ วิธีคัดลอกไฟล์โดยไม่ใช้โปรแกรม scp


netcat (nc) มีอยู่บนทั้งสองระบบหรือไม่ หากเป็นเช่นนั้นให้ใช้เซสชัน ssh ของคุณเพื่อทำการเชื่อมต่อพอร์ต TCP และใช้ nc บนพอร์ตนั้น

คุณมีrsync?
slhck

3
คุณสามารถทำสิ่งนี้ได้:ssh user@remotehost cat /path/to/remote/file > /path/to/local/file
nm

ต้องระบุราคา @ นาโนเมตร (สำหรับฉันเซิร์ฟเวอร์ ubuntu)
Ivan Black

@nm ใช้งานไม่ได้สำหรับฉัน - ไฟล์เสียหาย (ฉันเดาว่าข้อความเข้าสู่ระบบแตก)
monnef

คำตอบ:


91

วิธีส่งไฟล์:

cat file | ssh ajw@dogmatix "cat > remote"

หรือ:

ssh ajw@dogmatix "cat > remote" < file

วิธีรับไฟล์:

ssh ajw@dogmatix "cat remote" > copy

20
@ggg ที่ไม่เป็นความจริงเลย cd /tmp; cat /bin/bash > test; chmod a+x test; diff test /bin/bash; ./testทำงานได้ดีทั้งหมด ไม่มีอะไร "วิเศษ" เกี่ยวกับไฟล์ไบนารีโดยเนื้อแท้ ไฟล์ทั้งสองในตัวอย่างของฉันเปรียบเทียบกันและมีการตรวจสอบเดียวกัน เป็นความจริงที่การคัดลอกและวางจากหน้าต่างเทอร์มินัลจะไม่ทำงานเพราะสิ่งต่าง ๆ เช่นลำดับการควบคุมและอักขระที่ไม่สามารถพิมพ์ได้ แต่การใช้ไพพ์แบบนี้จะไม่เข้าใกล้เทอร์มินัล
เฟล็กโซ

@Flexo ฉันต้องการสิ่งนี้ข้อยกเว้นเพียงอย่างเดียวคือฉันต้องไปป์ไลน์ใน jpg ทั้งหมดจากโฟลเดอร์ iterate ผ่าน / storage / sdcard1 / * jpg และ>ไฟล์ที่มีชื่อเดียวกันได้อย่างไร?
George Profenza

2
@GeorgeProfenza คุณจะต้องเพิ่มtarส่วนผสม tar cvf - /path/*.jpg | ssh foo@bar.com "tar xvf -"หรือสิ่งที่คล้ายกันควรจะทำงาน
เฟล็กโซ

สิ่งหนึ่งที่เกี่ยวข้องกับสิ่งที่ ggg และ Flexo พูดข้างต้นคือคุณไม่สามารถใช้ตัวเลือก "-t" เพื่อ ssh
mjg123

1
ดี! นอกจากนี้คุณยังสามารถใช้ pv แทนแมวตัวแรกเพื่อที่คุณจะได้รับpv file | ssh ajw@dogmatix "cat > remote"
แถบ


1

คุณสามารถใช้xxdและการอ้างอิงที่น่าเกลียดบางอย่างเพื่อคัดลอกไฟล์หลาย ๆ ไฟล์เช่นเดียวกับการเรียกใช้คำสั่งบนพวกเขาและดำเนินการพวกเขา:

ssh -t foo@bar.com "
echo $'"$(cat somefile | xxd -ps)"' | xxd -ps -r > "'somefile'"
chmod +x somefile
echo $'"$(cat someotherfile | xxd -ps)"' | xxd -ps -r > "'someotherfile'"
chmod +x someotherfile
./somefile
./someotherfile
"

อาคำตอบของฉันชัดเจนเกินไป l33t
Aric

-1

นอกจากการวางไฟล์ลงในรีโมตcatแล้วคุณยังสามารถใช้ไคลเอนต์ SFTP บางตัวเพื่อถ่ายโอนไฟล์


+1 แต่ควรสังเกตว่า OP กำลังพยายามหลีกเลี่ยง scp เนื่องจากไม่มีอยู่ในระบบ ด้วยข้อ จำกัด นี้จึงเป็นไปได้ที่ FTP เซิร์ฟเวอร์จะต้องมีอยู่ที่จุดรับซึ่งทำให้กระบวนการคัดลอกขึ้นอยู่กับซอฟต์แวร์อื่นที่ไม่ใช่ค่าเริ่มต้น
Paul Sasik

-1

python3 -m http.serverในไดเรกทอรีเดียวกันกับไฟล์ที่ต้องการ - หลังจากนั้นคุณสามารถcurlหรือwgetหรือดาวน์โหลดไฟล์ด้วยเบราว์เซอร์ของคุณ โปรดทราบว่ามีคำสั่งที่ทำงานว่าไฟล์ทั้งหมดของคุณจากไดเรกทอรีปัจจุบันจะสามารถใช้ได้ต่อสาธารณชนจนกว่าคุณจะกด+CtrlC

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.