ฉันจะทำให้ ssh-agent ทำงานบน ssh และใน tmux (บน OS X) ได้อย่างไร?


17

ฉันมีการตั้งค่าคีย์ส่วนตัวสำหรับบัญชี GitHub ของฉันข้อความรหัสผ่านที่ฉันเชื่อว่าเก็บไว้ในพวงกุญแจของ OS X แน่นอนฉันจะได้ไม่ต้องพิมพ์ในเมื่อผมเปิดหน้าต่าง terminal ssh git@github.comและป้อน

อย่างไรก็ตามเมื่อฉันใช้ bash ในเซสชัน ssh หรือภายใน local ในเซสชัน tmux ฉันต้องพิมพ์ข้อความรหัสผ่านทุกครั้งที่ฉันพยายาม ssh เพื่อ github

คำถามนี้แสดงให้เห็นว่ามีปัญหาที่คล้ายกันเกิดขึ้นกับหน้าจอ แต่ฉันไม่เข้าใจปัญหานี้ดีพอที่จะแก้ไขใน tmux นอกจากนี้ยังมีหน้านี้ซึ่งรวมถึงวิธีการแก้ปัญหาที่ค่อนข้างซับซ้อน แต่สำหรับ zsh

แก้ไข :

ในการตอบสนองต่อคำตอบของ@ Mikelจากสถานีท้องถิ่นฉันได้รับผลลัพธ์ต่อไปนี้:

[~]
$ echo $SSH_AUTH_SOCK
/tmp/launch-S4HBD6/Listeners
[~] 
$ ssh-add -l
2048 [my key fingerprint] /Users/richie/.ssh/id_rsa (RSA)
[~]
$ typeset -p SSH_AUTH_SOCK
declare -x SSH_AUTH_SOCK="/tmp/launch-S4HBD6/Listeners"

ในขณะที่ ssh หรือใน tmux ฉันได้รับ:

[~]
$ echo $SSH_AUTH_SOCK

[~]
$ ssh-add -l
Could not open a connection to your authentication agent.
[~]
$ typeset -p SSH_AUTH_SOCK
bash: typeset: SSH_AUTH_SOCK: not found

echo $SSH_AGENT_PID ไม่ส่งคืนเชลล์สิ่งที่ฉันเรียกใช้


เกี่ยวกับtypeset -p SSH_AUTH_SOCKอะไร
Mikel

@Mikel bash: typeset: SSH_AUTH_SOCK: not foundจากภายใน ssh / tmux ฉันจะลองใช้คืนนี้ถ้าจำเป็น
Rich

@Mikel ฉันได้เพิ่มเอาท์พุทของคำสั่งนั้นไปยังคำถาม
รวย

AFAIK คำถามและคำตอบไม่ใช่เฉพาะ OS X ที่เกี่ยวข้องกับหลีกเลี่ยงบาง dups ไม่ใช่ OS X เฉพาะคือsuperuser.com/q/334975/46794และsuperuser.com/q/479796/46794
Blaisorblade

@Blaisorblade ฉันรู้สึกว่าข้อความรหัสผ่านของฉันถูกเก็บไว้ในพวงกุญแจ OS X (แม้ว่าฉันจะจำไม่ได้ว่าตอนนี้ทำไมฉันเชื่อว่าเป็นเช่นนั้น) มันไม่ถูกต้องเหรอ?
รวย

คำตอบ:


4

เพื่อนร่วมงานของฉันสร้างฟังก์ชั่นทุบตีบางอย่างเพื่อช่วยในการค้นหาตัวแทนสด: https://github.com/wwalker/ssh-find-agent

เขาใช้เป็นหลักสำหรับการเชื่อมต่อระหว่างระบบ (แล็ปท็อปกับเดสก์ท็อป ฯลฯ ) แต่ฉันใช้บ่อยที่สุดสำหรับเซสชัน tmux ในพื้นที่ที่คุณออกจากระบบ / จัดการหน้าต่างของคุณ (OS X สำหรับตัวเอง)

การใช้

  1. ดาวน์โหลด ssh-find-agent.bash ( git clone git://github.com/wwalker/ssh-find-agent.gitทำงาน)

  2. เพิ่มรายการต่อไปนี้ใน ~ / .bashrc:

    . /path/to/ssh-find-agent.bash
    
  3. จากนั้นคุณสามารถพิมพ์ดังต่อไปนี้เพื่อตั้งค่า SSH_AUTH_SOCK ในเชลล์ปัจจุบันของคุณ:

    set_ssh_agent_socket
    

ฉันยอมรับคำตอบนี้มากกว่าคำตอบอื่นใดที่อาจใช้ได้เพราะไม่ต้องการการส่งต่อตัวแทน SSH ซึ่งดีกว่าสำหรับวัตถุประสงค์ของฉัน ขอบคุณ!
รวย

8

ทางออกที่สวยงามหยิบมาจาก dagit.o :

สร้าง ~/.ssh/rc

#!/bin/bash
if [ -S "$SSH_AUTH_SOCK" ]; then
    ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi

เพิ่ม ~/.tmux.conf

set -g update-environment "DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
set-environment -g 'SSH_AUTH_SOCK' ~/.ssh/ssh_auth_sock

7

ใน.tmux.confไฟล์กำหนดค่าของคุณเพิ่มบรรทัดนี้:

ตั้งค่า -g update-environment "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION"

สิ่งนี้ทำให้ตัวแปรสภาวะแวดล้อมเหล่านี้ถูกคัดลอกจากเชลล์หลักของคุณไปยังเชลล์ใด ๆ ที่เปิดภายใน tmux ซึ่งอนุญาตให้ ssh-agent ทำงานอย่างถูกต้องภายในเชลล์ tmux เหล่านั้น


2
นี่คือวิธีการที่เหมาะสมในการรับค่าเหล่านั้นเป็นtmuxเซสชั่น update-environmentแต่ทั้งหมดของตัวแปรสภาพแวดล้อมเหล่านั้นแล้วควรจะรวมอยู่ในค่าเริ่มต้นของ OP ควรตรวจสอบupdate-environmentค่าของพวกเขาและอาจอัพเดทได้ทุกที่ที่มีการเปลี่ยนแปลง
Chris Johnsen

1
หืมมม .. หลังจากขุดต่อไปฉันเห็นด้วย - การตั้งค่าที่ฉันแสดงอยู่ในค่าเริ่มต้นแล้วและถ้าฉันเรียกใช้ tmux โดยไม่ใช้ไฟล์. tmux.conf ทุกอย่างจะทำงานอย่างถูกต้อง และถ้าฉันลบบรรทัดที่ฉันยกมาจากไฟล์. tmux.conf ของฉันนั่นก็ใช้ได้กับฉันเช่นกันถึงแม้ว่ามันจะไม่ได้มาก่อน เห็นได้ชัดว่ามีบางอย่างผิดปกติในบางครั้ง อาจจะเกี่ยวข้องกับการระงับ / กู้คืนหรือแนบ / แยกหรือ sshing ลงในเซสชั่น tmux จากระยะไกล ฉันจะทำให้ตาของฉันเปิดและอัปเดตถ้าฉันพบปัจจัยที่ทำให้มันทำซ้ำได้
Trevor Powell

update-environmentถูกตั้งค่าอย่างถูกต้อง อย่างไรก็ตามปัญหายังคงเกิดขึ้น
Rich

2
ปัญหานี้คือการกำหนดค่าที่จะถูกดำเนินการอีกครั้งเมื่อไม่มีtmuxเซิร์ฟเวอร์ท้าทายจุดประสงค์ของการแนบใหม่ ... บางทีอาจมีการสลับบรรทัดคำสั่งเพื่อปรับปรุงตัวแปรเหล่านั้นอีกครั้ง?
โทเบียส Kienzler

3

มันเกิดขึ้นกับฉันว่าบานหน้าต่างที่สร้างขึ้นเมื่อเชื่อมต่อผ่าน ssh จาก OS X เริ่มถามข้อความรหัสผ่านของฉันหลังจากนั้นไม่นานก็ใช้งานได้ ฉันพบวิธีแก้ไขที่ขโมยบรรทัดนี้จากhttp://santini.di.unimi.it/extras/ph/my-tmux-setup.html

eval $(tmux show-environment -t [YOUR-SESSION] | grep '^SSH_AUTH_SOCK')

เพียงแค่เรียกใช้จากบานหน้าต่างที่บ่น


2

ไม่แน่ใจว่าคุณกำลังใช้ bash หรือ shell อื่น แต่การตั้งค่า tmux ของผู้ชายคนนี้ดูเหมือนจะใช้ได้กับ bash โดยส่วนตัวฉันใช้ zsh กับoh-my-zshและฉันพบว่า ssh-agent เริ่มทำงานใน tmux หลังจากที่ฉันเพิ่ม

zstyle :omz:plugins:ssh-agent agent-forwarding on

ไปที่ไฟล์. zshrc ของฉันและโหลดการกำหนดค่าใหม่ในเซสชั่นการทำงาน zsh ของฉัน ฉันยังพบโซลูชัน zsh ที่มุ่งเน้นของผู้ชายคนนี้แต่กลับกลายเป็นว่าไม่จำเป็นสำหรับฉัน


1

อะไร:

echo $SSH_AUTH_SOCK
echo $SSH_AGENT_PID
ssh-add -l

พิมพ์?

รันในเทอร์มินัลปกติของคุณจากนั้นรันภายในtmuxเซสชันของคุณ พวกเขาควรพิมพ์ในสิ่งเดียวกัน


ฉันเพิ่มการตอบสนองต่อคำสั่งเหล่านี้ให้กับคำถาม ฉันยังตระหนักว่าปัญหานี้เกิดขึ้นเมื่อฉันลงชื่อเข้าใช้ผ่าน ssh (โดยไม่ใช้ tmux) และได้แก้ไขคำถามตามนั้น
Rich

4
sshมันง่าย. เปิดตัวแทนการส่งต่อ วิธีที่ง่ายที่สุดที่จะทำว่าจะดำเนินการแทนssh -A ใช้นามแฝงเพื่อให้คุณไม่ต้องพิมพ์ทุกครั้งหรือใส่ไว้ในของคุณssh .SSH/config
Mikel

เจ๋งขอบคุณ ที่ทำงานให้กับ SSH ความคิดใด ๆ วิธีการแก้ไขใน tmux?
รวย

0

มีโซลูชั่นหลายมี แต่หนึ่งที่ง่ายที่สุดที่พบในคำตอบของฮันส์ Ginzel ของลงวันที่ 8 มกราคม 2016 เพื่อเป็นคำถามที่ StackOverflow ที่เกี่ยวข้องลงวันที่ 27 มกราคม 2014 เพียงเพิ่มสิ่งต่อไปนี้ลงในเชลล์~/.profileหรือสิ่งที่คล้ายกัน:

alias ssh='eval $(tmux show-env -s | grep "^SSH_") && ssh'

ไม่จำเป็นต้องกำหนดฟังก์ชั่นหลายบรรทัดหรือสร้างไฟล์ชั่วคราวใหม่ หากคุณไม่ต้องการนามแฝงsshเพียงแค่เปลี่ยนเป็นfixsshและลบ&& sshในตอนท้ายและเรียกใช้fixsshเมื่อใดก็ตามที่คุณต้องการเรียกใช้sshจากภายในเซสชัน tmux ที่ติดตั้งใหม่

คำตอบโดยฮันส์ Ginzel แสดงให้เห็นว่า 'รุ่นใหม่' ของ tmux show-env -sจะต้องวิ่ง งานนี้สำหรับฉันใน tmux 2.7 และในการอ่านของฉันของการเปลี่ยนแปลง , -sถูกเพิ่มเข้ามาใน 3 มิถุนายน 2008 ก่อนการเปิดตัวของ tmux 0.3 tmux 2.3 (29 กันยายน 2559) อยู่ใน Debian เสถียร

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