Tôi vặn vít, thoát ra .bashrc


27

Tôi đặt "exit" trong tệp .bashrc của mình. Tôi không có quyền truy cập vật lý vào máy vì vậy để kết nối với nó, tôi sử dụng ssh. Tôi không có quyền root. Mỗi khi tôi kết nối với máy chủ, kết nối sẽ tự động đóng lại.

Cho đến nay, tôi đã thử:

  • Ghi đè .bashrc bằng scp và sftp. Kết nối đóng lại trước khi tôi có thể làm bất cứ điều gì.
  • Sử dụng một vài chương trình GUI khác nhau để truy cập ssh (đóng kết nối)
  • Ghi đè tập tin bằng ftp. (không thể sử dụng ftp)
  • Từ máy tính ở nhà của tôi
    • $ ssh host "bash --noprofile --norc" (đóng kết nối)
    • $ ssh host "mv .bashrc bashrc_temp" (đóng kết nối)
    • $ ssh máy chủ lưu trữ "rm .bashrc" (điều tương tự)
    • $ ssh host -t (đóng kết nối)

Có bất cứ điều gì tôi có thể làm để vô hiệu hóa .bashrc hoặc có thể ghi đè lên tệp trước khi .bashrc có nguồn gốc không?

CẬP NHẬT

@ ring0

Tôi đã thử đề nghị của bạn, nhưng không có may mắn. Tệp bashrc vẫn chạy đầu tiên.

Một điều khác tôi đã thử là đăng nhập bằng tài khoản khác và sudo chỉnh sửa .bashrc, nhưng tôi không có đặc quyền sudo trên tài khoản này.

Tôi đoán tôi sẽ liên lạc với quản trị viên.

CHỈNH SỬA

@ vỏ bọc

Tôi không thể tin được, nhưng phương pháp này hiệu quả! Mặc dù "thoát" xảy ra trong một vài dòng đầu tiên (chỉ bao gồm một vài if nếu khối và xuất câu lệnh) trong tệp .bashrc, tôi vẫn quản lý để Ctrl-c ngắt nó thành công trong vòng hai mươi lần thử (mất khoảng 3 phút). Tôi đã xóa dòng vi phạm trong .bashrc và mọi thứ lại hoạt động bình thường trở lại.


2
darwinawards.com bạn nên có quyền truy cập (tạm thời) với tư cách là người dùng có thể ghi đè lên tệp .bashrc của bạn hoặc thay đổi vỏ mặc định của bạn thành một thứ khác. "Hỏi Quản trị viên hệ thống của bạn" như MS nói.

2
man 8 sshdnói rằng đó 9. Runs user's shell or command.là bước thứ chín ...: - /

1
scp cũng sẽ ngừng hoạt động vì shell vẫn được mở và .bashrc được gọi
Aleksandr Levchuk

FYI lý do hầu hết các đề xuất này không hoạt động là vì ssh thực thi bất kỳ lệnh nào bằng cách chuyển nó làm đối số cho trình bao của người dùng. Tìm kiếm thực thi trong session.c. Không có cách nào để sửa đổi / thêm / xóa các đối số của lệnh gọi này của trình bao.
Đánh dấu Wagner

Câu trả lời:


37

bạn có thể thử hủy bỏ (ctrl + C) trước khi phần thoát của bạn .bashrcđược thực thi.

Tôi đã thử bằng cách thêm phần sau vào đầu bashrc của người kiểm tra, nó hoạt động, đó chỉ là vấn đề thời gian. Rất dễ dàng trong trường hợp của tôi:

sleep 3
echo "Too late... bye"
exit 0

8
+1, vì có lẽ đó là giải pháp duy nhất không yêu cầu trợ giúp từ quản trị viên hệ thống. Tuy nhiên, rất nhiều may mắn được yêu cầu để có thời gian chính xác (máy chủ ssh -v có thể giúp một chút).
JooMing

Trên thực tế, ctrl + C đã hoạt động. Ngay cả khi không ngủ. Tôi đã đặt "exit" vào bashrc của mình và có thể phục hồi bằng ctrl + C nhanh sau khoảng 4 lần thử. Vui lòng chỉnh sửa câu trả lời để tôi có thể thay đổi "-1" thành "+1".
Alexanderr Levchuk

@Aleksandr Levchuk thực hiện
shellholic

4
Tôi rất đánh giá cao sự kết hợp giữa hiệu quả công nghệ thấp và tàn bạo thảm hại ở đây.
unixtippse

1
Tôi đang cười như điên, vội vàng khi cuối cùng nó cũng hoạt động. Cảm ơn @JooMing, tôi đã thử tất cả các phương pháp từ đây serverfault.com/questions/94503/, thậm chí cả phương pháp nhấn Ctrl + C, nhưng nó chỉ hoạt động sau khi thêm tùy chọn -v!
mxmlnkn

12

Tôi đã quản lý để làm rối tập tin .bashrc của mình trên một cụm mới mà tôi đã được cấp quyền truy cập dùng thử. Không muốn có vẻ như là một người mới, điều cuối cùng tôi muốn làm là yêu cầu sự giúp đỡ từ các quản trị viên và tôi không thể có được một thời gian tốt ^ + C để làm việc.
Tuy nhiên, điều đã làm là gửi một lệnh 'rm' làm đối số cuối cùng cho ssh. I E

ssh -tv user@host rm .bashrc

Tôi không thể có lệnh 'mv' để hoạt động (đã thử trước mà không có -t), vì vậy tôi nghĩ rằng tùy chọn -t phải thực hiện nó, nhưng bạn có thể kiểm tra nếu bạn muốn. Bây giờ tôi đã khôi phục từ tệp .bashrc ~ (được tạo bởi vim) mọi thứ trừ dòng tinh ranh trong câu hỏi và mọi thứ đều đúng trong thế giới! = D


2
ssh -tv user@home mv .bashrc .bashrc-oldlàm việc cho tôi
Code Commander

3

Nếu bạn có thể đăng nhập như một người dùng khác, hãy thử điều này:

su user -s /bin/sh

Bạn sẽ cần mật khẩu của bạn, tất nhiên.


1
bạn có thể thử vỏ khác nhau, không dựa trên sh: kshhoặccsh
Hubert Kario

3

Nếu tôi nhớ lại một số trải nghiệm tồi tệ mà tôi đã có như thế này, ssh, scp, sftp dường như chạy các tệp khởi tạo.

Đề nghị của tôi là sử dụng FTP đơn giản và sau đó xóa hoặc đổi tên tệp xấu trên dòng lệnh FTP sau khi đăng nhập. Tôi cho rằng hệ thống của bạn sẽ cho phép bạn truy cập FTP. Trong trường hợp như vậy, hãy chắc chắn thay đổi mật khẩu của bạn (một cách an toàn) khi bạn đã sửa chữa xong.


Filezilla đã làm việc hoàn hảo cho việc này. Chỉ cần thả xuống menu "Máy chủ" và chọn cài đặt "Buộc hiển thị tệp ẩn".
Daniel G

1

Từ man ssh( OpenSSH_5.6p1ít nhất, không chắc chắn khi nó được thêm vào),

~/.ssh/rc
        Commands in this file are executed by ssh when the user logs in, just
        before the user's shell (or command) is started.  See the sshd(8) manual
        page for more information.

.. có nghĩa là bạn có thể tạo ~/.ssh/rccó chứa những điều sau đây:

mv ~/.bashrc ~/bak.bashrc

Sau đó, khi bạn sshvào, bashrc có vấn đề sẽ được chuyển ra ngoài, trước khi trình đăng nhập của bạn được bắt đầu - sau đó bạn rõ ràng có thể sửa lỗi bak.bashrcvà di chuyển nó trở lại vị trí


0

Kết nối thông qua SCP hoặc SFTP và chỉnh sửa / đổi tên / xóa tệp .bashrc của bạn theo cách đó. Chỉnh sửa - D'oh, tôi thấy bạn nói rằng bạn đã thử nó. Ồ tốt


0

Tôi đã có cùng một vấn đề, và bằng cách nào đó đã có thể giải quyết nó. Tôi đã sử dụng ssh để truy cập hệ thống, và nhấn và giữ Ctrl + c ngay khi tôi đăng nhập vào hệ thống. Sau đó, ~ / .bashrc không được đọc và tôi đã có thể sửa đổi nó.


1
Bản sao chính xác của câu trả lời được đánh giá cao nhất ở đây
pauseka

0

Tôi tìm thấy điều này làm việc.

Ngắt bộ tải khởi động grub bằng cách nhấn e ... một lần nữa nhấn e để nhập các dòng tải grub, một lần nữa nhấn e để chỉnh sửa dòng kernel,

đi đến cuối dòng;

thêm init = / bin / bash ở cuối dòng,

nhập để trở về, b để khởi động,

nó sẽ mở shell bash, mở vim /root/.bashrc và chỉnh sửa cho phù hợp. thoát và bây giờ bạn sẽ có thể đăng nhập


0

Nếu bạn đang sử dụng Homestead Vagrant ...

Đây là cách tôi đã thoát khỏi món dưa muối này.

(Sử dụng Git Bash trên Windows 10)

cd ../Homestead/
mv ~/.ssh/known_hosts ~/.ssh/known_hosts_OLD
ssh vagrant@127.0.0.1 -p 2222 mv ./.bashrc ./.bashrc_OLD

Lưu ý: mật khẩu mặc định là "vagrant"

Những bài viết này đã giúp tôi:


0

Một vài gợi ý làm việc cho tôi từ chuỗi Reddit này :

ssh you@the.box /bin/bash --noprofile --norc
ssh -t jacksgt@example.com vi ./.bashrc
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.