เซสชัน SSH แบบไม่โต้ตอบ
ถ้าคุณไม่จำเป็นต้องมีการโต้ตอบเซสชั่นบนเซิร์ฟเวอร์ระยะไกลคุณสามารถดำเนินการsshในสภาพแวดล้อมโดยไม่ต้องttyเช่นเป็นส่วนหนึ่งของการเรียกใช้ Shell Scriptการดำเนินการในอัตโนมัติ
คุณต้องสร้างโปรแกรมที่เมื่อเรียกว่าพิมพ์รหัสผ่านเพื่อออกมาตรฐานเช่นสคริปต์ทุบตีต่อไปนี้คุณต้องทำให้สามารถใช้งานได้โดยใช้chmod +x pwd.sh:
#!/usr/bin/env bash
echo "password"
จากนั้นตั้งค่าSSH_ASKPASSตัวแปรสภาพแวดล้อมเป็นพา ธ ไปยังโปรแกรมนี้จากนั้นเรียกใช้sshในการดำเนินการอัตโนมัติเช่นนี้:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
เมื่อไม่มีttyแต่SSH_ASKPASSและDISPLAY(สำหรับ X11 ตั้งค่าเริ่มต้น) SSH จะเรียกใช้งานโปรแกรมที่ระบุโดยSSH_ASKPASSและใช้เอาต์พุตเป็นรหัสผ่าน สิ่งนี้มีวัตถุประสงค์เพื่อใช้ในสภาพแวดล้อมแบบกราฟิกเพื่อให้หน้าต่างสามารถปรากฏขึ้นเพื่อขอรหัสผ่านของคุณ ในกรณีนี้เราเพิ่งข้ามหน้าต่างคืนรหัสผ่านจากโปรแกรมของเรา คุณสามารถใช้securityอ่านจากพวงกุญแจแทนเช่นนี้:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls(บนsshบรรทัดคำสั่ง) เป็นคำสั่งที่ดำเนินการเมื่อsshลงชื่อเข้าใช้และเอาต์พุตของมันจะถูกพิมพ์ใน Automator แน่นอนคุณสามารถเปลี่ยนเส้นทางไปยังไฟล์เพื่อบันทึกผลลัพธ์ของโปรแกรมที่คุณเริ่มต้น
ใช้เซสชัน SSH แบบโต้ตอบ sshpass
ฉันดาวน์โหลดรวบรวมและติดตั้งsshpassและทำงานได้อย่างสมบูรณ์ นี่คือสิ่งที่ฉันทำ:
- รับเครื่องมือสำหรับนักพัฒนาของ Apple
- ดาวน์โหลดและเปิด
sshpass-1.05.tar.gz
- เปิดเชลล์ไปยังไดเร็กทอรี
sshpass-1.05
- วิ่ง
./configure
- วิ่ง
make
- เรียกใช้
make install(คุณอาจต้องการsudoมัน)
ตอนนี้โปรแกรมได้รับการติดตั้ง/usr/local/bin/sshpassแล้ว ดำเนินการโดยใช้บรรทัดดังต่อไปนี้:
sshpass -pYourPassword ssh username@hostname
คุณสามารถอ่านรหัสผ่านได้securityก่อนที่จะทำเช่นนั้นและใช้รหัสนี้:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
ล้อมสิ่งนี้ในฟังก์ชั่นเชลล์และคุณสามารถพิมพ์เช่นssh-yourhostnameเพื่อเชื่อมต่อโดยดึงมันแล้วป้อนรหัสผ่านโดยอัตโนมัติ
STDIN is not a terminalยังคงถามผมสำหรับรหัสผ่านและหลังจากที่ผมเข้ามันฉันได้ 2) การประชุมแบบโต้ตอบกับsshpassที่-pตัวเลือกที่เห็นได้ชัดไม่ได้ทำอะไร แต่การทำงานsshpassในขณะที่SSH_ASKPASSตั้งค่าใช้งานไม่ได้!