Có cách nào để bỏ qua hoặc ngăn chặn việc thực thi ~/.profile
khi đăng nhập vào máy chủ Linux từ xa bằng ssh hoặc putty không?
Có cách nào để bỏ qua hoặc ngăn chặn việc thực thi ~/.profile
khi đăng nhập vào máy chủ Linux từ xa bằng ssh hoặc putty không?
Câu trả lời:
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 --noprofile
lá cờ để vô hiệu hóa /etc/profile
, ~/.profile
vv và --norc
để vô hiệu hóa ~/.bashrc
như 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.
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"
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
Như những người khác đã đề cập, chạy bash với --noprofile
cờ 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 return
sẽ bỏ qua phần còn lại của kịch bản nếu $SSH_CONNECTION
biế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ự.