Cách chỉ định nhiều kết hợp HostName / Port trong .ssh / config


10

Tôi có nhiều máy tính xách tay và máy trạm kéo và đẩy từ nhiều kho Mercurial trên một máy chủ trung tâm. Tôi thường sử dụng .ssh/configđể đặt bí danh:

Host repo-server
HostName server.somedomain
User user143
IdentityOnly yes
IdentityFile ~/hgkey
Port 156

... Và một số tùy chọn khác, bạn có ý tưởng. Sau đó tôi có thể chỉ cần thực hiện một hg push ssh://repo-server//hgroot/someprojecttrên mọi kho lưu trữ cục bộ và tôi có thể thay đổi địa chỉ máy chủ và cổng ở một nơi.

Đối với máy trạm, điều này hoạt động tốt, nhưng máy tính xách tay có thể truy cập máy chủ từ bên trong mạng hoặc từ bên ngoài, sử dụng một địa chỉ khác và một cổng khác. Có cách nào để tôi có thể chỉ định nhiều kết hợp HostName / Port để SSH tự động thử chúng theo thứ tự không? Bằng cách này, người dùng có thể đẩy và kéo mà không cần phải quan tâm đến địa chỉ chính xác.

(tất nhiên, sử dụng VPN sẽ là giải pháp chính xác nhất)

Câu trả lời:


5

Tôi sợ điều đó là không thể với SSH.

Bạn có thể giải quyết vấn đề này bằng ProxyCommandtùy chọn ssh, cùng với tập lệnh tùy chỉnh tạo kết nối TCP đến máy chủ (sử dụng netcat), tùy thuộc vào cách thức / nơi máy tính xách tay của bạn được kết nối. Một cái gì đó dọc theo dòng:

#!/bin/bash
SSID=$(/sbin/iwgetid wlan0 -r)

case "$SSID" in
net1)
  nc <host1> <port1>
  ;;
net2)
  nc <host2> <port2>
  ;;
*)
  nc <host3> <port3>
  ;;
esac

Sau đó, trong của bạn .ssh/config, bạn sẽ cần những điều sau đây:

Host repo-server
  User user143
  IdentityOnly yes
  IdentityFile ~/hgkey
  ProxyCommand path-to-script

Đoán tôi sẽ viết một kịch bản sửa đổi các HostNamemục sau đó. Cảm ơn bạn.
leoluk

Điều này có vẻ đặc thù của Linux .. ví dụ: / sbin / iwgetid dường như không tồn tại trong WSL ...
Michael

-1

Một cách khác có thể là thiết lập một tập lệnh để chuyển tiếp cổng ssh 22 của ip bên phải của ip sang một số cổng cục bộ không sử dụng của máy tính xách tay của bạn và sau đó ssh ở đó. Tôi sử dụng nó trong khá nhiều tình huống.


1
Điều này không rõ ràng nếu không có ví dụ.
Andrew Schulman
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.