เป็นวิธีที่ดีกว่าในการจัดการกับเซิร์ฟเวอร์ตัดการเชื่อมต่อของ sshfs mounts คืออะไร?


58

ฉันมีหลายไดเรกทอรีที่ติดตั้งผ่านsshfs บางครั้งฉันถูกตัดการเชื่อมต่อจากเซิร์ฟเวอร์ (ไม่สามารถกำหนดได้โดยฉัน) ฉันมักจะติดไดเรกทอรีเช่นนี้

sshfs user@server.example.com:/home/user /mnt/example

เมื่อเซิร์ฟเวอร์ยกเลิกการเชื่อมต่อระบบย่อย sshfs ไม่ได้ถอนการติดตั้ง/เพิ่มไดเรคทอรี แต่แทนที่จะล็อคไม่สามารถเข้าถึงได้ mountภูเขาก็ยังคงมองเห็นได้เมื่อพิมพ์ เมื่อฉันพิมพ์

ls /mnt/example

กระบวนการได้รับการล็อค (เช่นCtrl+ cไม่ช่วย) ดังนั้นฉันทำ

sudo umount -l /mnt/example
# find pid of corresponding process:
ps aux | grep example.com
kill -9 <pid of locked sshfs process>

มีวิธีที่ดีกว่าในการจัดการกับสิ่งนี้หรือไม่? เห็นได้ชัดว่าsshfsควรจะทำumountและทำความสะอาด ... นึกคิดมันจะเชื่อมต่อโดยอัตโนมัติ


นี่คืองานสำหรับอุโมงค์เชื่อมต่อ TCP โดยอัตโนมัติ
Gilles

4
วิธีการแก้ปัญหาใด ๆ ที่ใช้ซอฟต์แวร์บำรุงรักษา ?
เซบาสเตียน

คำตอบ:


45

คุณสามารถเรียกใช้ sshfs ด้วยตัวเลือก "เชื่อมต่อใหม่" เราใช้ sshfs กับ PAM / automount เพื่อแชร์ไฟล์เซิร์ฟเวอร์สำหรับแต่ละเวิร์กสเตชันในเครือข่ายของเรา เราใช้ -o เชื่อมต่อใหม่เป็นพารามิเตอร์สำหรับ sshfs ส่วนใหญ่เป็นเพราะผู้ใช้ของเราระงับคอมพิวเตอร์ของพวกเขาและเมื่อตื่น sshfs จะไม่เชื่อมต่อใหม่ (หรือตอบสนองหรืออะไรก็ตาม)

ตัวอย่างเช่น:

sshfs mvaldez@192.168.128.1:/home/mvaldez/REMOTE /home/mvaldez/RemoteDocs -o reconnect,idmap=user,password_stdin,dev,suid

โปรดทราบว่าหากคอมพิวเตอร์ระยะไกลไม่ทำงาน sshfs อาจไม่ตอบสนองเป็นเวลานาน


11

สิ่งนี้สามารถแก้ไขได้โดยลดการหมดเวลา เพิ่มรายการต่อไปนี้$HOME/.ssh/configหรือ/etc/ssh/ssh_config:

ServerAliveInterval 15
ServerAliveCountMax 3

ส่งผลให้หมดเวลา 45 วินาที


3
สิ่งนี้จะช่วยได้หากปัญหานั้นเป็นความผิดของ SSH มีปัญหาใหญ่ที่sshfsไม่จัดการกับความตายของsshกระบวนการพื้นฐานอย่างสง่างาม
บาฮามาต

แน่นอนนี่เป็นเพียงวิธีแก้ปัญหาและควรได้รับการแก้ไขภายใน sshfs
Thor

แต่มีเพียงวิธีแก้ปัญหาที่เกี่ยวข้องกับสาเหตุหนึ่งจากหลาย ๆ ปัญหาของเขาอาจไม่มีส่วนเกี่ยวข้องกับ keepalives ธรรมชาติของคำถามนั้นน้อยกว่าเกี่ยวกับสาเหตุและอีกมากเกี่ยวกับการทำความสะอาดให้อยู่ในสถานะที่สอดคล้องกัน
บาฮามาต

5

ฉันมีเซิร์ฟเวอร์ที่ฉันใช้สำหรับการจัดเก็บและสำหรับพื้นที่ที่ฉันอาศัยอยู่ฉันขาดมันไปในที่อื่น เพื่อที่จะนำไฟล์เข้าสู่เครือข่ายของฉันฉันใช้ราสเบอร์รี่ pi ที่เมาท์ไฟล์จากเซิร์ฟเวอร์โดยใช้ sshfs

เมื่อเร็ว ๆ นี้ฉันต้องอัพเกรดเป็น raspbian jessie เนื่องจากไฟฟ้าขัดข้องและตระหนักว่า sshfs ไม่เสถียรอย่างจริงจัง โฟลเดอร์จะได้รับการติดตั้งอย่างเหมาะสม แต่หลังจากผ่านไประยะหนึ่งฉันจะไม่สามารถเชื่อมต่อกับพวกเขาและราสเบอร์รี่ pi จะหยุดถ้าฉันต้องการที่จะแสดงเนื้อหาของการติดตั้ง

สิ่งที่ฉันพยายามคือ:

  1. ใช้การเชื่อมต่อใหม่ใน fstab
  2. ใช้ ServerAliveInterval และ ServerAliveCountMax ในไฟล์. ssh / config แต่ไม่มีประโยชน์
  3. โซลูชันอื่น ๆ ที่ฉันอ่านในฟอรัมส่วนใหญ่

แต่ไม่มีลูกเต๋า! จนกว่าฉันจะแก้ไขไฟล์ fstab ดังนี้:

sshfs#user@server:/remote/folder /local/mount/dir fuse IdentityFile=sshkeyfile,Port=XXX,uid=1000,gid=1000,allow_other,_netdev,ServerAliveInterval=45,ServerAliveCountMax=2,reconnect,noatime,auto 0 0

และมันใช้งานได้! ไม่มีการยกเลิกการเชื่อมต่อ! ฉันดูเหมือนว่า sshfs ไม่ได้อ่านไฟล์ config ssh ด้วยเหตุผลบางอย่างและสัญญาณ keep alive ไม่เคยถูกส่ง


3

ดูเหมือนจะเป็นงานสำหรับ autofs มันค่อนข้างเชี่ยวชาญในการจัดการการติดตั้งเครือข่ายหลายชนิด (nfs, samba, sshfs, คุณตั้งชื่อ) และสังเกตเห็นเมื่อสิ่งเหล่านั้นจำเป็นต้องติดตั้งใหม่ นอกจากนี้ยังสามารถดูแลการ unmount พวกเขาหลังจากช่วงเวลาของการเลิกใช้งานและติดตั้งพวกเขาเมื่อมีการร้องขอระบบไฟล์


11
autofs จะทำการเชื่อมต่อตามความต้องการและสามารถยกเลิกการต่อเชื่อมเมื่อไม่ได้ใช้งาน (ซึ่งจะช่วยลดเวลาในการแก้ไขปัญหา) แต่จะไม่ช่วยถ้า sshfs แฮงค์เนื่องจากเซิร์ฟเวอร์ตัดการเชื่อมต่อ
Gilles

1

หากยังมีคนประสบปัญหานี้อยู่ฉันก็ยังไม่สามารถแก้ไขได้ ฉันหาวิธีแก้ปัญหาการทำงาน

สคริปต์ทับทิมต่อไปนี้ทำการหลอกลวง มันสร้างโฟลเดอร์ที่เรียกว่า "keepalive" ซ้ำแล้วซ้ำอีก แค่วิ่งต่อไปเรื่อย ๆ จนกระทั่งไม่มีที่สิ้นสุด

$i =1 
$num =0
begin
    puts("Inside the loop i = #$i" )
    $i +=1
    puts 'creating obj'
    system 'mkdir  /{yourmountpoint}/keepalive'
    sleep 5
    puts 'we did it, it should be still alive'
end while $i > $num

ฉันไม่รู้ว่าทำไมงานนี้ แต่ดูเหมือนว่าจะแก้ปัญหาของฉันที่ฉันไม่ได้ใช้งานเป็นเวลาหนึ่งนาทีและทุกอย่างค้าง มันแค่พยายามสร้างโฟลเดอร์ที่จุดติดตั้งและดูเหมือนว่าจะป้องกันไม่ให้ตัดการเชื่อมต่อและแช่แข็งทุกอย่าง


6
ถ้ามันเหมาะกับคุณคุณก็ไม่จำเป็นต้องใช้สคริปต์และล่ามทับทิม บรรทัดเดียวก็ทำได้เช่นกัน:while true; do mkdir -p /x/y; sleep 2; done
mivk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.