เหตุใดการส่งต่อตัวแทน ssh จึงไม่ทำงาน


57

ในคอมพิวเตอร์ของฉันใช้ MacOSX ฉันมีสิ่งนี้ใน ~ / .ssh / config

Host *
ForwardAgent yes
Host b1
ForwardAgent yes

b1 เป็นเครื่องเสมือนที่ใช้งาน Ubuntu 12.04 ฉันชอบมันเช่นนี้:

ssh pupeno@b1

และฉันเข้าสู่ระบบโดยไม่ต้องขอรหัสผ่านเพราะฉันได้คัดลอกกุญแจสาธารณะของฉันแล้ว เนื่องจากการส่งต่อฉันควร ssh ไปยัง pupeno @ b1 จาก b1 และควรใช้งานได้โดยไม่ต้องขอรหัสผ่าน แต่ไม่มี มันถามรหัสผ่าน

ฉันพลาดอะไรไป

นี่คือเอาต์พุต verbose ของ ssh ที่สอง:

pupeno@b1:~$ ssh -v pupeno@b1
OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to b1 [127.0.1.1] port 22.
debug1: Connection established.
debug1: identity file /home/pupeno/.ssh/id_rsa type -1
debug1: identity file /home/pupeno/.ssh/id_rsa-cert type -1
debug1: identity file /home/pupeno/.ssh/id_dsa type -1
debug1: identity file /home/pupeno/.ssh/id_dsa-cert type -1
debug1: identity file /home/pupeno/.ssh/id_ecdsa type -1
debug1: identity file /home/pupeno/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 35:c0:7f:24:43:06:df:a0:bc:a7:34:4b:da:ff:66:eb
debug1: Host 'b1' is known and matches the ECDSA host key.
debug1: Found key in /home/pupeno/.ssh/known_hosts:1
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pupeno/.ssh/id_rsa
debug1: Trying private key: /home/pupeno/.ssh/id_dsa
debug1: Trying private key: /home/pupeno/.ssh/id_ecdsa
debug1: Next authentication method: password
pupeno@b1's password:

คำตอบ:


94

ปรากฎว่ากุญแจของฉันไม่ได้อยู่ในตัวแทนและสิ่งนี้ได้แก้ไข:

OS X :

ssh-add -K

Linux / Unix :

ssh-add -k

คุณสามารถลิสต์คีย์ที่โหลดโดยใช้:

ssh-add -l

ssh-add -L # for more detail

5
โปรดทราบว่าssh-add -Kเฉพาะ OS X.
Roger Lipscombe

คุณต้องทำสิ่งนี้ทุกครั้งที่รีบูตหรือไม่?
Krauser

8
  1. ตรวจสอบว่า./ssh/id_rsa .ssh/id_dsa .ssh/id_ecdsaไฟล์ของคุณมีสิทธิ์ที่ถูกต้องซึ่งผู้ใช้ของคุณควรเป็นเจ้าของและเป็น chmoded 600

  2. ตรวจสอบว่าคุณมีคีย์สาธารณะที่ถูกต้องในpupeno/.ssh/authorized_keysวันที่ b1 และตรวจสอบว่าauthorized_keysมีตัวแบ่งบรรทัดที่ท้ายคีย์

  3. ตรวจสอบว่าคุณใช้ ssh-agent หรือไม่ลองโหลดคีย์ผ่าน ssh-add

  4. ลองใช้การรับรองความถูกต้องที่ใช้ GSSAPI และส่งต่อด้วย ssh -K


การอนุญาตของคีย์นั้นใช้ได้และคีย์ใน authorized_keys นั้นใช้ได้ (ไม่อย่างนั้นฉันคิดว่าฉันจะมีปัญหาในการเชื่อมต่อในตอนแรก)
pupeno

คุณมี ssh-agent กำลังทำงานอยู่หรือไม่? จะเกิดอะไรขึ้นเมื่อคุณเพิ่ม ssh แล้ว ssh -A pupeno @ b1 และ ssh pupeno @ b1
Daniel Prata Almeida

ทำไมคุณไม่อัปเดตคำตอบเพื่อพูดถึง ssh-add -K และฉันจะยอมรับของคุณแทนที่จะเป็นของฉัน (เนื่องจากข้อมูลถูกโพสต์เกือบจะพร้อมกัน)
pupeno

6

ฉันมีปัญหากับเซิร์ฟเวอร์ sshd ปฏิเสธการร้องขอการส่งต่อตัวแทนเนื่องจากไม่มีพื้นที่เหลือใน / tmp นี่เป็นเพราะ sshd ต้องการสร้างซ็อกเก็ตใน / tmp การล้างดิสก์ช่วยแก้ปัญหาของฉันได้

ssh -v พูดกลับแล้ว:

debug1: Remote: Agent forwarding disabled: mkdtemp() failed: No space left on device

1
ฉันมีปัญหาเดียวกันมีเพียงสิทธิ์เท่านั้นที่ผิดใน / tmp ขอบคุณ !!
nevyn

6

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


2

เพื่อประโยชน์ของ googler อื่น ๆ ที่มาถึงคำถามนี้ด้วย:

ช่องว่างที่ไม่ถูกต้องในไฟล์ ~ / .ssh / config อาจทำให้เกิดรอยขีดข่วนได้

ฉันเพิ่งช่วยเพื่อนร่วมงานคนหนึ่งของฉันที่มีสิ่งนี้:

# incorrect
host foobar ForwardAgent yes

แทนสิ่งนี้:

# correct
host foobar
  ForwardAgent yes

ฉันได้พบกับกรณีที่ไม่มีการเยื้องคำสั่งภายใต้รายการโฮสต์ที่สร้างความแตกต่างให้กับฟังก์ชั่นแม้ว่ามันจะไม่ควร


0

เพิ่มบรรทัดต่อไปนี้ลงในไฟล์. ssh / config

  Host **Server_Address**
     ForwardAgent yes

เพิ่มรหัสลงในตัวแทน SSH

 ssh-add -K

เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล

ssh -v **username**@**Server_Address**

เรียกใช้การทดสอบการเชื่อมต่อกับ GitHub

ssh -T git@github.com

เรียกใช้การทดสอบระยะไกลกับที่เก็บ git เป้าหมาย

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