วิธีการหลีกเลี่ยงการถูกถามว่า "ใส่รหัสผ่านสำหรับคีย์" เมื่อฉันทำการดำเนินการ ssh บนโฮสต์ระยะไกล?


43

ฉัน ssh เป็นโฮสต์ระยะไกล (linux, fedora) และฉันต้องการที่จะดำเนินการ ssh (git กับ bitbucket) ที่นั่น มี ssh-agent กำลังทำงานบนเครื่องนั้น

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

แต่เมื่อฉันต้องการคอมไพล์ฉันต้องป้อนวลีรหัสผ่าน

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

หมายเหตุ: หากฉันทำงานกับเครื่องนั้นในพื้นที่มันจะไม่ขอให้ฉันป้อนข้อความรหัสผ่าน


1
ฉันไม่ได้ใช้มัน แต่มีคำสั่ง ssh-add ที่ฉันคิดว่าใช้สำหรับสิ่งนั้น
barlop

คำตอบ:


80

ในความคิดของฉันวิธีที่ดีที่สุดของการใช้ ssh

ก่อนใช้ Git ให้เพิ่มรหัสของคุณในssh-agent

เริ่มssh-agentถ้าไม่ได้เริ่ม:

$ eval `ssh-agent -s`

เพิ่มคีย์ส่วนตัวของคุณโดยใช้ssh-add

$ ssh-add ~ / .ssh / id_rsa_key
ป้อนรหัสผ่านสำหรับ/home/user/.ssh/id_rsa_key :
เพิ่มข้อมูลประจำตัว: /home/user/.ssh/id_rsa_key (/home/user/.ssh/id_rsa_key
)

ตรวจสอบว่าคีย์ถูกเพิ่ม (พารามิเตอร์เป็นตัวพิมพ์เล็ก L):

$ ssh-add -l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: a7: 49: 1a: e5: 4c: 94: 6f
/home/user/.ssh/id_rsa_key (RSA)

ลองเชื่อมต่อกับเซิร์ฟเวอร์ Git ของคุณ:

$ ssh git.example.com

ตอนนี้คุณสามารถใช้ Git โดยไม่ต้องใส่ข้อความรหัสผ่านพิเศษ

ทางอื่น

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt


แต่ฉันใช้ Git เพิ่มรหัสของคุณไปยัง ssh-agent แล้วจะทำอย่างไร? ขอบคุณ
ลิลลี่

@ lily ขออภัยฉันไม่เข้าใจคำถามของคุณ
โรมัน

1
นี่คือทางออกที่ได้ผลสำหรับฉัน
Skatox

2
ฉันจะทำให้ถาวรนี้ได้อย่างไร เพียงแค่ใส่ลงไป.bashrc?
oarfish

1
ปีงบประมาณevalเป็นสิ่งจำเป็นเพราะมันออกคำสั่งที่ส่งออกตัวแปรสภาพแวดล้อมเช่น SSH_AUTH_SOCK ที่จำเป็น unix.stackexchange.com/questions/351725/…
wisbucky

21

หากคุณssh-agentทำงานอยู่แล้วคุณสามารถเพิ่มรหัสและคุณจะต้องป้อนข้อความรหัสผ่านหนึ่งครั้งและเพียงครั้งเดียวสำหรับเซสชันนั้น

ssh-add ~/.ssh/id_rsa

คุณไม่ได้พูดว่าระบบปฏิบัติการที่คุณใช้อยู่ แต่ถ้ามันเป็น Linux & Gnome แอปพลิเคชัน "รหัสผ่านและคีย์" (ชื่อ CLI:) seahorseสามารถจัดการสิ่งเหล่านี้เพื่อให้พวกเขาถูกปลดล็อกเมื่อคุณเข้าสู่ระบบ (ไม่ต้องใช้วลีรหัสผ่าน) . สภาพแวดล้อมเดสก์ทอป Linux อื่น ๆ มีผู้จัดการของตัวเอง ฉันไม่แน่ใจว่าระบบปฏิบัติการอื่นจะทำอะไรที่นี่


3

เหตุผลหลักสำหรับการถามวลีรหัสผ่านคือกุญแจของคุณถูกเข้ารหัสให้เปรียบเทียบสองสิ่งนี้:

  • ไม่ได้เข้ารหัส

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • การเข้ารหัส

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

ดังนั้นคุณต้องทำอย่างใดอย่างหนึ่งต่อไปนี้:

  1. หากมีการเข้ารหัสคุณสามารถลองลบการเข้ารหัสได้
  2. คุณใช้รหัสผิด หากคุณต้องการใช้รหัสอื่นให้ระบุไฟล์อื่นหรือแก้ไขของคุณ~/.ssh/configและระบุไฟล์ข้อมูลประจำตัวอื่น ( IdentityFile)
  3. วิ่งssh-add -lไปที่รายการตัวตนของคุณทั้งหมด (จากนั้นเปรียบเทียบกับท้องถิ่นของคุณ) และตรวจสอบอีกครั้งด้วย Stash หากคุณใช้ปุ่มขวา (พวกเขาอยู่ในการกำหนดค่า Stash)
  4. หากคุณรู้วลีรหัสผ่านและคุณต้องการทำให้เป็นแบบอัตโนมัติให้ลองวิธีแก้ปัญหาต่อไปนี้:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

การแก้ไขปัญหา:

  1. ตรวจสอบอีกครั้งว่าตัวแทน SSH ของคุณกำลังทำงาน ( eval "$(ssh-agent -s)")
  2. เรียกใช้คอมไพล์อีกครั้งผ่าน: GIT_TRACE=1 git pullหรือด้วยGIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+) เพื่อดีบักคำสั่งของคุณอีกครั้ง
  3. คุณสามารถลองบายพาสเพื่อขอรหัสผ่าน (ซึ่งจะเปลี่ยนเส้นทางไปเป็นtrue) แต่ฉันไม่คิดว่ามันจะช่วยได้ หากถามว่ามีเหตุผลและจำเป็นโดยทั่วไป

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

ssh-addโปรแกรมจะเป็นการเปิดตัวแทนซึ่งสามารถเก็บไว้ (และมีให้) รหัสผ่าน วิธีการใช้งานได้จากระยะไกลอยู่ในปกครองของเปลือกโต้ตอบของคุณ (เพื่อให้ตัวแทนไม่ได้หยุด)

นี่คือคำถามที่เกี่ยวข้องบางส่วน:

ตอนนี้ ... การเชื่อมต่อระยะไกลssh-addเป็นกฎคำสั่งของคุณไม่ได้เข้าสู่ระบบดังกล่าวจึงไม่ได้เริ่มต้น คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยการเรียกใช้สคริปต์ที่

  • เริ่มต้น ssh-agent
  • เริ่มต้น ssh-add
  • เพิ่มคีย์ของคุณ
  • รันคำสั่งที่คุณต้องการ

จุดที่อ่อนแอเป็นขั้นตอนที่สอง: คุณจะยังคงได้รับการพร้อมท์สำหรับรหัสผ่านเว้นแต่คุณจะลดลงการรักษาความปลอดภัยของคุณโดยใช้คีย์ที่ไม่มีรหัสผ่าน บางคนทำสิ่งนี้คนส่วนใหญ่แนะนำให้ต่อต้าน


ssh-addไม่สตาร์ทเอเจนต์ มันเชื่อมต่อกับเอเจนต์ที่รันอยู่แล้ว
ams

ขอบคุณ - ฉันเคยทำสิ่งเหล่านี้ในสคริปต์ที่แยกต่างหากและมองข้ามส่วนที่ขาดหายไป
Thomas Dickey

0

คุณสามารถลบข้อความรหัสผ่านของคีย์ของคุณได้อย่างง่ายดายโดยใช้คำสั่งต่อไปนี้

ssh-keygen -p

บนพรอมต์แรกให้ป้อนพา ธ ของไฟล์ (หรือกด Enter เพื่อเปลี่ยนค่าเริ่มต้น) พรอมต์ที่สองป้อนข้อความรหัสผ่านเก่าพร้อมท์ถัดไปเพียงแค่กด Enter เพื่อยกเลิกการตั้งข้อความรหัสผ่าน

ดูเหมือนว่านี่เป็นวิธีที่ง่ายที่สุด!


0

คุณจะยังคงได้รับพรอมต์รหัสผ่านเพื่อถอดรหัสคีย์ส่วนตัวแม้ว่าจะถูกโหลดเข้าไปssh-agentจนกว่าจะเพิ่มรหัสสาธารณะ SSH ที่สอดคล้องกันในระยะไกล~/.ssh/authorized_keysสาธารณะที่สอดคล้องกันจะเพิ่มเข้าไปในระยะไกล

ในการทำซ้ำ:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

$ ssh-add
# Enter passphrase for /home/uvsmtid/.ssh/id_rsa: 
# Identity added: /home/uvsmtid/.ssh/id_rsa (/home/uvsmtid/.ssh/id_rsa)

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

สับสนพอสมควร รหัสผ่านการเข้าสู่ระบบ SSH ระยะไกลจะเพียงพอในกรณีนี้

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

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