มีปัญหาแปลก ๆ ฉันได้สร้างสคริปต์ทุบตีเล็ก ๆ ซึ่งเรียกใช้คำสั่งบนโฮสต์ระยะไกลผ่าน ssh (โดยใช้การตรวจสอบกุญแจสาธารณะ)
เมื่อฉันเรียกใช้สคริปต์นี้ด้วยตนเองจากบรรทัดคำสั่งมันทำงานได้ดี แต่เมื่ออยู่ใน /etc/cron.hourly มันล้มเหลวด้วยPermission denied, please try again.
ข้อผิดพลาด
- ฉันอย่างชัดเจนตั้งสำคัญในสคริปต์ที่ใช้
ssh -i /root/.ssh/id_rsa user@remote "command"
; - สคริปต์กำลังทำงานในฐานะรูท (ฉันได้เพิ่มการ
echo `id` > /tmp/whoami.log
ตรวจสอบอีกครั้ง); และ - รหัส ssh ไม่ได้รับการป้องกันด้วยรหัสผ่าน ...
ระบบคือเซิร์ฟเวอร์ Ubuntu 12.04 ฉันไม่สามารถเข้าถึงทางไกลเพื่อแก้ไขปัญหาได้ แต่อย่างที่ฉันบอกว่าใช้ ssh ด้วยตนเองหรือสคริปต์ทุบตีเดียวกันจากบรรทัดคำสั่งทำงาน
มีความคิดว่าทำไมสิ่งนี้ถึงเกิดขึ้นหรือจะแก้ไขได้อย่างไร?
ปรับปรุง
ปรากฎว่าฉันเข้าใจผิดและรหัส ssh ได้รับการป้องกันด้วยรหัสผ่าน (ด้วยการโหลดพวงกุญแจ ssh-agent) ดังนั้นทำไมมันล้มเหลวจากสคริปต์ แต่ไม่เมื่อทำงานจากเซสชันทุบตี การเพิ่ม. ~/.keychain/$HOSTNAME-sh
สคริปต์ของฉันแก้ไขปัญหาได้ (ด้วย @grawity ที่ชี้ให้ฉันไปในทิศทางที่ถูกต้องและให้คำตอบที่ครอบคลุม)
SSH_AUTH_SOCK
เกี่ยวข้องอย่างไร (แม้ว่าฉันยินดีที่จะลองทำอะไร) ฉันกำลังเข้าถึงไฟล์กุญแจโดยตรงและไฟล์คีย์ไม่ได้รับการป้องกันด้วยรหัสผ่าน สำหรับKRB5CCNAME
การค้นหาอย่างรวดเร็วพบว่านี่เป็นสิ่งที่ต้องทำกับ Kerberos อีกครั้ง - ไม่เห็นการเชื่อมต่อกับปัญหานี้ แต่บางทีฉันอาจจะพลาดบางสิ่งบางอย่างที่นี่ ...
-v
ตัวเลือกในssh
คำสั่งนั้น...
ssh -i
คำสั่งอย่างชัดเจนทั้งสองกรณี ... ฉันจะลองยกเลิกการตั้งค่าตัวแปรเหล่านั้นในสคริปต์และดู คำแนะนำที่ดีในการเพิ่ม-v
- ฉันจะเพิ่มด้วย
SSH_AUTH_SOCK
และKRB5CCNAME
ตัวแปรสภาพแวดล้อม