Bỏ qua ~ / .profile khi đăng nhập từ xa vào máy chủ linux


32

Có cách nào để bỏ qua hoặc ngăn chặn việc thực thi ~/.profilekhi đăng nhập vào máy chủ Linux từ xa bằng ssh hoặc putty không?


Tại sao bạn muốn làm điều này? Tại sao không chỉ chỉnh sửa các giá trị trong tập tin? (Rốt cuộc là hồ sơ của bạn.)
Telemachus

7
Ví dụ, điều này rất hữu ích nếu ai đó làm hỏng tệp .profile và bạn không có quyền truy cập trực tiếp vào hệ thống :)
khỉ_p

Đó chính xác là tình huống tôi thấy mình ở khỉ_p
Andrew Hampton

Câu trả lời:


30

Đối với bash:

$ ssh hostname "bash --noprofile"

6
Bạn cũng sẽ cần -ttùy chọn, tôi nghĩ.
grawity

2
ssh -t tên máy chủ "bash --noprofile". Nếu -t không có tôi đã nhận được lỗi "tiêu chuẩn phải là một tty".
nitin

14

Nếu bạn đang tìm kiếm để vô hiệu hóa tất cả các kịch bản đăng nhập, bạn có thể sử dụng --noprofilelá cờ để vô hiệu hóa /etc/profile, ~/.profilevv và --norcđể vô hiệu hóa ~/.bashrcnhư sau:

$ ssh 127.0.0.1 "bash --noprofile --norc"

Hãy nhớ rằng bạn cũng có thể khởi chạy một lớp vỏ thay thế nếu có sẵn. Tôi đã phải sử dụng nó sau khi làm hỏng chsh:

$ ssh 127.0.0.1 sh

Điều này rất có thể sẽ thả bạn vào một vỏ trống (không có dấu nhắc) vì vậy hãy cung cấp cho nó lsđể đảm bảo nó đang hoạt động.


4

Nếu máy mục tiêu của bạn nằm trong vỏ bash:

user@host:/$ ssh hostname "bash --noprofile"

Ngoài ra, nếu có một hồ sơ khác bạn muốn sử dụng

user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"

1

Ngoài ra, hãy thử sử dụng chương trình FTP như WinSCP để xóa tệp đăng nhập nhầm. Điều này sẽ loại bỏ nó, nhưng ít nhất bạn sẽ có thể đăng nhập vào shell mặc định


hoặc có lẽ chỉ đổi tên nó.
jezmck

1

Như những người khác đã đề cập, chạy với --noprofilecờ khi bạn bắt đầu kết nối sẽ hoạt động, mặc dù nếu bạn đang sử dụng một trình bao khác thì điều này có thể hoặc không phải là một tùy chọn.

Một cách khác là để tập lệnh hồ sơ tự phát hiện kết nối SSH và hành xử theo đó. Vì các kết nối SSH thường sẽ đặt một số biến môi trường, điều này có thể dễ dàng được kiểm tra. Thêm một cái gì đó như các dòng sau vào đầu hồ sơ của bạn là đủ:

if [ "$SSH_CONNECTION" != "" ]; then
  echo Logging in with ssh
  return
else
  echo Logging in with something that is not ssh
fi

# rest of your profile goes here

Các returnsẽ bỏ qua phần còn lại của kịch bản nếu $SSH_CONNECTIONbiến môi trường được thiết lập, mà thông thường sẽ được tạo ra bất cứ khi nào một kết nối SSH được bắt đầu. Nếu không thì hồ sơ sẽ được chạy như bình thường.

Lưu ý rằng điều này sẽ chỉ bỏ qua tập lệnh hồ sơ bị ảnh hưởng. Tất cả các tập lệnh hồ sơ khác (ví dụ /etc/profile:) vẫn sẽ được xử lý trừ khi bạn sửa đổi chúng tương tự.

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.