Máy chủ .ssh / config có thể có nhiều mục HostName không?


10

Tôi đã thiết lập chuyển tiếp cổng ssh và bộ định tuyến để tôi có thể ssh vào máy tính trên mạng gia đình khi tôi không ở nhà. Hiện tại tôi có hai mục trong .ssh/configtệp của mình một cho khi tôi ở mạng gia đình và một cho khi tôi không:

Host mycomputer
  HostName 192.168.X.X

Host mycomputerathome
  HostName my.no-ip.dynamic

Điều này hoạt động nhưng tôi tự hỏi nếu tôi có thể làm cho mọi thứ dễ dàng hơn trên chính mình. Tôi đã hy vọng có một cách để liệt kê nhiều mục nhập Tên máy chủ để nếu lần đầu tiên thất bại, nó sẽ rơi trở lại mục thứ hai:

Host mycomputer
  HostName 192.168.X.X
  HostName my.no-ip.dynamic

Vì vậy, trước tiên nó sẽ cố gắng kết nối với máy chủ trên mạng cục bộ của tôi và nếu không có, nó sẽ cố gắng kết nối bằng tên máy chủ động không có ip của tôi. Tôi đã thử nhập hai HostNames nhưng ssh mycomputerchỉ chạy các khối không làm gì cả.

Tôi đã tắt xác thực mật khẩu có lợi cho các khóa để vô tình kết nối với máy tính trên mạng cục bộ khi tôi không ở trong mạng gia đình của mình không nên mạo hiểm mật khẩu của mình đi bất cứ nơi nào không nên.

Có thể chỉ định HostNames dự phòng để thử nếu cái đầu tiên không hoạt động không?


unix.stackexchange.com/questions/424755/... là tương tự và có lẽ có thể được điều chỉnh cho hostname thay vì cổng
thrig

BTW, .ssh/configcó thể chạy các kịch bản cho các thuộc tính nhất định. Tôi biết bạn có thể với ProxyCommand. Bạn có thể làm một cái gì đó như thể hiện trong Hỏi & Đáp này từ SF - serverfault.com/questions/401233/ .
slm

Câu trả lời:


8

Thật là xấu, nhưng tôi nghĩ bạn có thể làm điều đó bằng cách sử dụng exectiêu chí để Matchthoát khỏi trạng thái thoát của một lần gõ cổng, vd

Host mycomputer
  Match exec "nc -z 192.168.1.11 %p"
    HostName 192.168.1.11
  Match !exec "nc -z 192.168.1.11 %p"
    HostName my.no-ip.dynamic

Lưu ý rằng điều này thực sự không thể biết bạn đang ở trên mạng "nhà" của bạn hay không - chỉ là bạn đang ở trong một mạng LAN riêng có cùng dải địa chỉ có dịch vụ nghe trên cùng một địa chỉ / cổng.


1
Tôi đã phải thêm một -w 1hoặc ncdường như chờ đợi mãi mãi. Điều có thể đơn giản hơn là Trận đấu thứ hai có thể Match exec "true"bởi vì nếu trận đấu đầu tiên thất bại, chỉ cần mù quáng thử lựa chọn thứ hai.
Corey Ogburn

@CoreyOgburn ah vâng tôi đã cố gắng để nghĩ ra một cách đẹp hơn để làm điều kiện thay thế (đáng tiếc Matchkhông có Else)
steeldriver

Vì vậy, tôi gặp phải một vấn đề với phương pháp này. Tôi cũng chạy một trang web, nói xyz.com, và khi tôi cố gắng để ssh xyz.comtôi Match exec "true"bắt gặp đó và chuyển hướng tôi vào máy chủ gia đình tôi sử dụng tên máy từ xa của tôi. Tôi sẽ thử với giám đốc điều hành của bạn nhưng tôi nghĩ điều tương tự sẽ xảy ra.
Corey Ogburn

Vâng, sử dụng của bạn Match exec... Match !execđang khiến ssh'ing sang các tên miền khác để kích hoạt Match !execvà viết lại Tên máy chủ.
Corey Ogburn

2
Vì vậy, nó chỉ ra rằng ~/.ssh/configkhông thể quan tâm ít hơn về thụt. Một số lệnh nhất định đặt lại phạm vi, tức là mỗi dòng Máy chủ mới cho biết "các dòng trước đó dành cho Máy chủ trước đó, các dòng sau dành cho Máy chủ mới này". Hóa ra Matchcó sức mạnh "đặt lại phạm vi" tương tự như Máy chủ. Để giải thích cho điều này, tôi đã thay thế dòng Máy chủ của mình bằng Match Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"và xác định tất cả các giá trị tùy chỉnh cho mạng cục bộ của mình. Sau đó tôi đã thêm một dòng phù hợp ngoại trừ !execvà thêm tất cả các giá trị khi tôi tắt mạng. Bây giờ nó hoạt động tốt cho tất cả các máy chủ.
Corey Ogburn

2

Tôi đang sử dụng như thế này.

Match host mycomputer exec "nc -G 1 -z 192.168.1.11 %p"
    HostName 192.168.1.11
Match host mycomputer # fallback
    HostName my.no-ip.dynamic
Host mycomputer
    # ... other configs

Host not-my-computer
# ... other configs

ssh_config không có cái gì đó giống như khối thụt đầu dòng. Nếu bạn muốn giới hạn câu phù hợp với một máy chủ cụ thể, thì bạn nên mô tả đầy đủ điều kiện.

Bạn có thể tránh chờ đợi lâu ncbằng cách cung cấp -G 1tùy chọn (thời gian chờ kết nối 1s) và bạn có thể sử dụng hành vi sau để tránh nhiều lần gọinc

Match
Giới thiệu một khối có điều kiện. Nếu tất cả các tiêu chí trên dòng Kết hợp được thỏa mãn, các từ khóa trên các dòng sau sẽ ghi đè lên các tiêu chí được đặt trong phần chung của tệp cấu hình, cho đến khi một dòng Kết hợp khác hoặc cuối tệp. Nếu một từ khóa xuất hiện trong nhiều khối Kết hợp được thỏa mãn, chỉ phiên bản đầu tiên của từ khóa được áp dụng.

https://www.freebsd.org/cgi/man.cgi?sshd_config(5)


1

Không; nếu bạn chỉ định nhiều HostNames cho một Hostmục nhập, chỉ mục đầu tiên sẽ được xác nhận:

$ grep -A5 Host .ssh/config
Host test
   HostName fake.tld.xyzzy
   HostName real.example.com
   HostName 127.1.2.3
   User username
$ ssh test
ssh: Could not resolve hostname fake.tld.xyzzy: Name or service not known

Tôi đoán nó có ý nghĩa. Nếu tôi gõ vào ssh mycomputerthì sẽ khá rõ ràng máy tính nào tôi đang kết nối.
Corey Ogburn
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.