Cách tắt các biến SendEnv được đặt trong ssh_config từ ~ / .ssh / config


30

Tôi không thể tìm thấy bất cứ nơi nào vì vậy tôi tự hỏi tôi có phải là người duy nhất gặp phải vấn đề như vậy không.

Theo mặc định ssh trên Red Hat và Debian ít nhất có ssh_config với tùy chọn SendEnv chuyển các biến LC * và LANG trong phiên từ xa. Nếu một người không phải là root để thay đổi / etc / ssh / ssh_config, làm thế nào anh ta có thể vô hiệu hóa hành vi đó? Tùy chọn SendEnv dường như đang tích lũy và tôi không thể thấy bất kỳ cách nào để đặt lại nó.

Và để tránh bị hỏi, tôi cần tránh chuyển địa điểm của mình để kiểm tra máy để tránh tác dụng phụ đối với các tập lệnh và chương trình dựa vào ngôn ngữ là mặc định cho máy.


Đây không phải là một câu trả lời cho câu hỏi của bạn, nhưng bạn có thể giải quyết vấn đề của mình bằng cách gọi các tập lệnh và chương trình trên máy thử nghiệm của bạn thông qua envhoặc bằng một tập lệnh bao bọc không?
Scott

2
vâng, cách giải quyết là có thể nhưng bất tiện
akostadinov

Câu trả lời:


18

Bạn không phải là người duy nhất . Như tài liệu trong ssh_config(5)bạn không thể không đặt SendEnv, bởi vì

Nhiều biến môi trường có thể được [...] trải rộng trên nhiều chỉ thị SendEnv.

Tuy nhiên, nếu bạn có root trên các máy kiểm tra, bạn có thể thay đổi AcceptEnvđể không chấp nhận các biến được gửi bởi máy khách.


4
tào lao, tôi chỉ thấy -F trên dòng lệnh có thể giúp nhưng thật quá bất tiện khi sử dụng. Xem bugzilla.mindrot.org/show_orms.cgi?id=1285
akostadinov

5

Điều này không thể được thực hiện ~/.ssh/configSendEnvkhông thể bị ghi đè.

Sử dụng bí danh sẽ không hoạt động đối với các tập lệnh gọi ssh.

Một thay thế là xuất một chức năng. Ví dụ ~/.bashrc:

function ssh() {
    LANG="en_US.UTF-8" \
    LC_ADDRESS="$LANG" \
    LC_IDENTIFICATION="$LANG" \
    LC_MEASUREMENT="$LANG" \
    LC_MONETARY="$LANG" \
    LC_NAME="$LANG" \
    LC_NUMERIC="$LANG" \
    LC_PAPER="$LANG" \
    LC_TELEPHONE="$LANG" \
    LC_TIME="$LANG" \
    LC_ALL="$LANG" \
    /usr/bin/ssh $@
}
export -f ssh

1

Có tùy chọn SetEnv, người ta có thể buộc LANGmột số giá trị cụ thể trước khi gửi nó.

Ngoài ra trang nam nói rằng

Có thể xóa tên biến SendEnv trước đó bằng các mẫu tiền tố với -.

nhưng tôi đã không quản lý để làm cho công việc này.


Xem bugzilla.mindrot.org/show_orms.cgi?id=1285 , có lẽ điều đó sẽ giải thích tại sao -cách tiếp cận không hiệu quả. Đề nghị tốt mặc dù để mã hóa LANG từ xa và các vars khác trong cấu hình ssh. Làm cho mọi thứ dễ dự đoán hơn. Có lẽ SetEnvlà một chỉ thị mới hơn bởi vì không ai khác đề nghị về nó. SetEnv LANG=en_US.UTF-8
akostadinov

0

Nếu bạn đang sử dụng bash, bạn có thể thiết lập bí danh ssh = 'LANG = lệnh ssh' để vô hiệu hóa LANG truyền đến các máy chủ khác.


0

Bạn có thể sử dụng su - youruserkhi bạn đăng nhập qua ssh. Điều này sẽ khởi động lại môi trường cho người dùng.

Trên thực tế, bạn khởi tạo một phiên mới với một môi trường mới.


Câu hỏi là để có môi trường lành mạnh tự động. Và btw su không phải lúc nào cũng được cài đặt. Và bạn phải nhập mật khẩu của bạn với su. Không hữu ích. Có cách giải quyết dễ dàng hơn.
akostadinov

0

Theo man ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

Vì vậy, bạn có thể ssh mà không tuân thủ/etc/ssh/ssh_config bằng cách chỉ định rõ ràng tệp cấu hình (mặc định) trên dòng lệnh ( ~/.ssh/configOK để trống):

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

Bạn có thể tạo một bí danh cho nó trong ~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

Khởi động lại bash shell, sau đó bạn có thể chỉ cần ssh như thế này:

$ ssh your_user@your_host

Xem bình luận của tôi ở trên. if one supplies on command line -F, then the system wide config is ignored according to man pagetừ bugzilla.mindrot.org/show_orms.cgi?id=1285 ; nó là một tùy chọn nhưng không thực sự là tính năng mong muốn.
akostadinov
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.