Làm cách nào để phát hiện khi shell được sở hữu bởi phiên SSH từ xa?


9

Câu hỏi của tôi tương tự như câu hỏi này , nhưng tôi đang tìm kiếm một cái gì đó hơi khác. Tôi có một máy tính xách tay mà tôi sử dụng để truy cập các máy Linux trên mạng theo hai trường hợp khác nhau:

  • Tôi có một kết nối trực tiếp, có dây với mạng.

  • Tôi có một kết nối gián tiếp với mạng. Có một máy cổng trên mạng tiếp xúc với Internet, tôi có thể sử dụng để thiết lập các đường hầm SSH tới các máy chủ lưu trữ trên mạng. Đây rõ ràng là một kết nối chậm hơn, độ trễ cao hơn nhiều.

Thư mục nhà của tôi có thể truy cập mạng từ tất cả các máy, vì vậy chúng chia sẻ một bản sao của tôi .bashrc. Tôi muốn thêm chức năng để .bashrcphát hiện kịch bản nào trong hai kịch bản tôi tham gia và hành động phù hợp (về mặt kỹ thuật, sẽ có ba kịch bản, trong đó thứ ba là tôi đang đăng nhập vào máy cục bộ của mình, nhưng điều đó có thể dễ dàng xử lý ). Tôi muốn làm những việc như:

  • alias ssh ssh -X khi tôi ở trên mạng cục bộ, nhưng tôi không muốn sử dụng chuyển tiếp X qua Internet.

  • export EDITOR=gvimkhi tôi ở trên mạng cục bộ, nhưng export EDITOR=vimkhi tôi ở xa.

Và như thế. Dựa trên câu trả lời trước đó, có vẻ như tôi sẽ có thể thực hiện được điều gì đó như thế này bằng cách kiểm tra nội dung của SSH_CLIENT(nếu nó tồn tại) và xem liệu địa chỉ IP của máy khách có khớp với một trong các bộ điều hợp mạng trên máy cục bộ của tôi không. Tôi nghĩ rằng tôi sẽ thấy nếu có một cách khéo léo hoặc mạnh mẽ hơn để thực hiện điều này.

Câu trả lời:


10

Để phát hiện phiên SSH, hãy sử dụng $SSH_CLIENT.

Để phân biệt giữa các phiên cục bộ và từ xa, có hai cách tiếp cận có thể: phía máy khách hoặc phía máy chủ. Về phía máy chủ, so sánh $SSH_CLIENTvới địa chỉ IP cục bộ hoặc bảng định tuyến; điều này thường sẽ cho bạn biết liệu kết nối đến từ mạng LAN. Về phía máy khách, bạn có thể muốn đặt ForwardX11các cài đặt trong ~/.ssh/config: đặt nó yescho các máy chủ LAN và nocho các máy chủ WAN. Điều này ngụ ý có một khác nhau ~/.ssh/configtrên các trang web khác nhau; đó là những gì tôi làm và tôi tạo ra nó với một kịch bản shell.

Nếu chuyển tiếp X11 được bật cho các kết nối LAN và tắt cho các kết nối WAN, thì bạn có thể thiết lập trình soạn thảo yêu thích của $DISPLAYmình.

Các cài đặt phía máy chủ thường sẽ đi vào .profile(hoặc .bash_profilenếu vỏ đăng nhập của bạn bị bash và bạn sử dụng .bash_profilehoặc .zprofilenếu vỏ đăng nhập của bạn là zsh).

case ${SSH_CLIENT%% *}//$(/sbin/ifconfig |
                          sed -n 's/^.* addr:\([0-9][0-9.]*\) .*/\1/p' |
                          tr '\n' /)/ in
  "") :;;# local session
  10.42.*/10.42.*) :;; # LAN session
  1.2.3.*/1.2.3.*) :;; # LAN session
  *) unset DISPLAY;; # WAN session
esac
export EDITOR=vim
if [ -n "$DISPLAY" ] && type gvim >/dev/null 2>/dev/null; then
  EDITOR=gvim
fi
export VISUAL="$EDITOR"

bật cho LAN và tắt cho LAN? Người thứ hai nên đọc mạng WAN - nhưng đó là chỉnh sửa ký tự đơn ...
Nils
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.