Có ssh giải quyết tên máy chủ từ cấu hình khi sử dụng chế độ ProxyCommand và netcat


16

Tôi đang cố gắng thiết lập một số tùy chọn phổ biến cho các kết nối ssh nảy. Đây là ~/.ssh/configtập tin của tôi , viết tắt:

Host *%via
  ProxyCommand ssh gateway -W $(echo %h | cut -d%% -f1) %p

Host gateway
  HostName gateway.example.com
  User username
  ForwardAgent yes
  IdentityFile keypathg

Host target
  User username
  HostName target.example.com
  IdentityFile keypatht

Khi tôi sử *%viadụng các Hostbí danh, tôi nhận được:

% ssh -vvv target%via
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: /Users/myuser/.ssh/config line 5: Applying options for *
debug1: /Users/myuser/.ssh/config line 12: Applying options for *%via
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/myuser/.ssh/tmp/target%via_22_myuser" does not exist
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -A gateway -W $(echo target%via | cut -d% -f1):22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/myuser/.ssh/id_rsa type -1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host

Tuy nhiên, nếu tôi sử dụng

% ssh target.example.com%via

Tôi nhấn máy chủ đích, nhưng là người dùng sai và không có xác thực pubkey.

Tôi nghĩ rằng câu hỏi của tôi, tại thời điểm này, là phương pháp nảy này, khi sử dụng ForwardAgent, đi qua toàn bộ cấu hình / môi trường ssh của tôi, hoặc chỉ các phím. Nếu chỉ là chìa khóa, trước đây có thể được sử dụng theo một cách nào đó?

Phiên bản ssh của tôi là 5.9v1, gateway là 5.9v1 và mục tiêu là 5.3p1. Tôi tin rằng -Wđã được giới thiệu trong 5.4, nhưng điều đó không quan trọng đối với hộp cuối cùng trong dòng? sử dụng trường cũ ncdường như không khác.

Tôi đã xác minh rằng tôi có thể tự ssh đến từng ô trong dòng. Làm như vậy chỉ ra rằng thông tin bí danh tên máy chủ không được thông qua, vì khi ở trên cổng, tôi không thể ssh targetnhưng tôi có thể ssh target.example.com. Điều này hoạt động với pubkey auth. cổng và mục tiêu tình cờ có cùng tên người dùng, đó là lý do tại sao điều này hoạt động nếu không có cấu hình được đẩy.

Nếu ForwardAgenthoặc cấu hình tương tự không thể đẩy thông tin này, cách tốt nhất để có được xung quanh nó, giữ một .ssh / config trên cổng với thông tin này?

Câu trả lời:


14

Wow, cảm ơn vì đã hỏi câu hỏi này. Tôi thấy rất hiếm khi thấy ai đó khai thác triệt để SSH và câu hỏi này đánh vào một vài lĩnh vực.

Đây không phải là một ProxyCommandvấn đề. Việc ProxyCommandđơn giản là hướng dẫn khách hàng ssh địa phương chuẩn bị trước khi cố gắng nói chuyện với khách hàng từ xa. Vâng, trong trường hợp của chúng tôi, chúng tôi nói chuyện với một phiên ssh khác, nhưng phiên đó, -Wchỉ đơn giản là lấy đầu vào của chúng tôi và chuyển tiếp nó sang một máy khác. Bạn có thể nghĩ rằng phiên ssh chuẩn bị là hoàn toàn độc lập. Tương tự xe hơi không thể tránh khỏi: Xe của bạn là cùng một chiếc xe, bất kể bạn có phải đi phà để đi từ điểm A đến điểm B.

Đây không phải là một ForwardAgentvấn đề. ForwardAgentcó ứng dụng khách cục bộ cung cấp một cơ sở cung cấp các khóa cục bộ trong môi trường của phiên từ xa. Bạn chưa từng thiết lập phiên từ xa.

Đây là một .ssh/configvấn đề định dạng. Lưu ý các dòng debug1 thứ hai và thứ ba. Họ liệt kê những khổ chủ đang được áp dụng từ của bạn .ssh/config. Bạn lưu ý rằng $ ssh target.example.com%viahoạt động, nhưng như tên người dùng và khóa sai. Chà, khổ thơ Host targetkhông được đọc (sẽ cung cấp tên người dùng và keyfile chính xác). Những khổ thơ nào được sử dụng? **%via.

Làm thế nào để có được những lựa chọn này để vượt qua? Chà, đủ thú vị, ký tự đại diện khớp với 0 chuỗi dài. Host target*sẽ phù hợp target, target%via, target.example.comtarget.example.com%via.

Và vì vậy, bạn đặt câu hỏi, sẽ thiết lập một trợ giúp .ssh/configtrên gatewaymáy. Không, nó sẽ không. Nó sẽ không bao giờ được đọc. Mọi thứ đang diễn ra từ máy cục bộ của chúng tôi.

Tất cả tôi đã giải thích, chỉ có câu trả lời tại sao $ ssh target.example.com%viakhông hoạt động.

Bạn thích $ ssh target%via. Đúng vậy, nó thuận tiện hơn. Biểu mẫu ngắn không thành công vì, với tư cách là tên máy chủ, targetkhông được tìm thấy; nó không giải quyết. Tại sao không phải là ssh spewing : ssh: Could not resolve hostname target: Name or service not known? Bởi vì ProxyCommandđã được thiết lập thành công. Các yếu tố của kết nối ssh đã được xây dựng, nhưng sự cố tên máy chủ đang xảy ra ở nơi nó không mong đợi, và do đó, nó đánh bom với thông điệp chung chung hơn. Tôi sẽ nộp báo cáo lỗi về điều này, để giúp xác định nơi thông tin gỡ lỗi có thể được cải thiện.

Bình luận cuối cùng:

Tôi thích Host *%viacú pháp. Nó sạch sẽ, nhưng linh hoạt. Tôi đã thấy trước đây Host *+*và nó sử dụng cả phần đầu tiên và phần cuối cùng %h(ost)để xác định nơi sẽ đi. Nhưng phải mất một chút nỗ lực để có được tâm trí của bạn xung quanh đó. liên kết: http://wiki.gentoo.org/wiki/SSH_jump_host

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.