autossh ในพื้นหลังไม่ทำงาน


12

ฉันตั้งอุโมงค์ผ่านทาง autossh

งานนี้:

autossh -M 33201 -N -i myIdFile -R 33101:localhost:22 autossh@myhost.com

ฉันต้องการเรียกใช้ autossh ในพื้นหลัง ดูเหมือนง่ายโดยใช้-fตัวเลือก

สิ่งนี้ไม่ได้ผล:

autossh -f -M 33201 -N -i myIdFile -R 33101:localhost:22 autossh@myhost.com

Autossh ทำงานในพื้นหลังได้ดี แต่การเชื่อมต่อ ssh ดูเหมือนจะล้มเหลวทุกครั้ง ใน / var / syslog ฉันเห็นหลายเหตุการณ์:

autossh[3420]: ssh exited with error status 255; restarting ssh

ผมทำอะไรผิดหรือเปล่า? การเดาได้อย่างแม่นยำคือมีส่วนเกี่ยวข้องกับการรับรองความถูกต้องผ่านทางไฟล์คีย์ ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร (การเพิ่ม -v ให้กับตัวเลือก ssh ดูเหมือนจะไม่บันทึกที่ใดก็ได้)

แก้ไข: ฉันได้บันทึก ssh โดยใช้ตัวเลือก -y

/usr/bin/ssh[3484]: debug1: Next authentication method: publickey
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_rsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_dsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_ecdsa
/usr/bin/ssh[3484]: debug1: No more authentication methods to try.
/usr/bin/ssh[3484]: fatal: Permission denied (publickey).
autossh[3469]: ssh exited with error status 255; restarting ssh

ดังนั้นดูเหมือนว่า autossh ไม่ยอมรับไฟล์ identiy ของฉัน ( -i myIdFile) เมื่อใช้ตัวเลือก -f ทำไมถึงเป็นอย่างนั้น?

(การทดสอบ 1.4c บน Raspian)


เหตุใดจึงต้องใช้ autossh เลย คุณสามารถใช้ systemd สำหรับ "รีสตาร์ทในสิ่งที่ล้มเหลว" ฉันสร้างส่วนสำคัญด้วยวิธีแก้ปัญหาของฉัน: gist.github.com/guettli/…
guettli

คำตอบ:


29

ดูเหมือนว่าเมื่อ autossh ลดลงเป็นพื้นหลัง (-f ตัวเลือก) มันกำลังเปลี่ยนไดเรกทอรีทำงานหมายถึงเส้นทางญาติไม่ทำงานอีกต่อไป หรือเจาะจงมากขึ้น: โดยการป้อนพา ธ สัมบูรณ์ของไฟล์ id ของคุณคุณอาจจะประสบความสำเร็จ

ฉันสร้างสถานการณ์จำลองขึ้นใหม่โดยการสร้างรหัสที่ไม่มีรหัสผ่านในตำแหน่งที่ไม่ใช่ค่าเริ่มต้น:

~/$ mkdir test
~/$ cd test
~/test$ ssh-keygen -f test_id_rsa

ฉันกด Enter สองครั้งเพื่อสร้างรหัสที่ไม่ได้รับการป้องกันด้วยรหัสผ่าน

ฉันคัดลอกคีย์ใหม่ไปยังเซิร์ฟเวอร์ของฉัน (ซึ่งอนุญาตให้ใช้การพิสูจน์ตัวตนด้วยรหัสผ่านในปัจจุบัน):

~/test$ ssh-copy-id -i test_id_rsa user@server

ก่อนอื่นฉันยืนยันว่ารหัสกำลังทำงานกับ ssh ปกติแล้วใช้ autossh เช่นคุณ:

~/test$ ssh -i test_id_rsa user@server
~/test$ autossh -M 13000 -N -i test_id_rsa user@server
^C

พวกเขาทำงานได้ดีทั้งคู่ดังนั้นฉันจึงสร้างปัญหาขึ้นใหม่ที่คุณมี:

~/test$ autossh -f -M 13000 -N -i test_id_rsa user@server

สิ่งนี้ไม่ทำงานและสิ่งต่อไปนี้ถูกเขียนไปที่/var/log/syslog:

autossh [2406]: ssh ออกก่อนกำหนดด้วยสถานะ 255; ออกจาก autossh

โดยการเปลี่ยนพา ธ ของคีย์ไฟล์ให้เป็นสัมบูรณ์จะสามารถทำงานได้:

~/test$ autossh -f -M 13000 -N -i /home/user/test/test_id_rsa user@server

/var/log/syslogไม่มีข้อผิดพลาดใน


ยอดเยี่ยมมันใช้งานได้
henning77

คุณบันทึกวันของฉัน!
arno_v

2
ตัวเลือก -N มีความสำคัญมิฉะนั้นคุณจะได้รับ "ssh ออกจากสถานะ 0; ออกจากระบบอัตโนมัติ" ขอบคุณ!
user30747

ยืนยันแล้วผมก็เพิ่งมีการเพิ่มเส้นทางไปยังไฟล์ "id_rsa" ชอบโดย: autossh -M 19001 -fN -y -i /home/pi/.ssh/id_rsa (ขอบคุณ @jmidgren)
รวย

4

ไม่แน่ใจว่าเกิดอะไรขึ้นกับ -f แต่คุณไม่สามารถแก้ไขได้:

nohup autossh -M 33201 -N -f -i myIdFile -R 33101:localhost:22 autossh@myhost.com &

nohup ใช้งานได้สำหรับฉันแม้ว่าจะไม่ได้ระบุไฟล์คีย์
valadil

nohupยังทำงานให้ทำงานautosshภายใต้runitใน Alpine Linux
Stuart Cardall

0

เพิ่มพารามิเตอร์ต่อไปนี้เพื่อ SSH เพื่อเลี่ยงผ่าน "คุณแน่ใจหรือไม่ว่าต้องการเชื่อมต่อ (ใช่ / ไม่ใช่)"

-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

คำสั่งสุดท้ายจะอยู่ในรูปแบบต่อไปนี้:

autossh -f -M $BASE_PORT -N -R $LOCAL_PORT:$LOCALHOST:$REMOTE_PORT $USER@$SERVER -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

มันใช้งานได้สำหรับฉัน
bluebird_lboro

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