ฉันเมาแล้วออกใน. bashrc


27

ฉันใส่ "exit" ในไฟล์. bashrc ของฉัน ฉันไม่สามารถเข้าถึงเครื่องได้ดังนั้นฉันจึงใช้ ssh ฉันไม่มีสิทธิ์รูท ทุกครั้งที่ฉันเชื่อมต่อกับเซิร์ฟเวอร์การเชื่อมต่อจะปิดโดยอัตโนมัติ

จนถึงตอนนี้ฉันได้ลองแล้ว:

  • เขียนทับ. bashrc ด้วย scp และ sftp การเชื่อมต่อปิดลงก่อนที่ฉันจะทำอะไรก็ได้
  • การใช้โปรแกรม GUI ที่แตกต่างกันสองสามตัวเพื่อเข้าถึง ssh (การเชื่อมต่อปิด)
  • เขียนทับไฟล์ด้วย ftp (ไม่สามารถใช้ ftp)
  • จากคอมพิวเตอร์ที่บ้านของฉัน
    • $ ssh host "bash --noprofile --norc" (ปิดการเชื่อมต่อ)
    • $ ssh host "mv .bashrc bashrc_temp" (ปิดการเชื่อมต่อ)
    • $ ssh host "rm .bashrc" (สิ่งเดียวกัน)
    • $ ssh host -t (การเชื่อมต่อปิด)

มีอะไรที่ฉันสามารถทำได้เพื่อปิดการใช้งาน. bashrc หรืออาจเขียนทับไฟล์ก่อนที่จะ. bashrc มีที่มา?

UPDATE

@ ring0

ฉันลองใช้คำแนะนำของคุณ แต่ก็ไม่มีโชค ไฟล์ bashrc ยังคงทำงานก่อน

อีกสิ่งหนึ่งที่ฉันพยายามคือลงชื่อเข้าใช้ด้วยบัญชีอื่นและแก้ไข sash .bashrc แต่ฉันไม่มีสิทธิ์ sudo ในบัญชีนี้

ฉันเดาว่าฉันจะติดต่อผู้ดูแลระบบ

แก้ไข

@shellholic

ฉันไม่อยากจะเชื่อเลย แต่วิธีนี้ใช้ได้ผล! แม้ว่า "exit" จะเกิดขึ้นภายในสองสามบรรทัดแรก (ประกอบด้วยเพียงไม่กี่ถ้าบล็อกและคำสั่งส่งออก ) ในไฟล์. bashrc ฉันยังคงพยายามที่จะขัดจังหวะ Ctrl-c ได้สำเร็จภายในยี่สิบพยายาม (ใช้เวลาประมาณ 3 นาที) ฉันลบบรรทัดที่กระทำผิดใน. bashrc และทุกอย่างกลับสู่การทำงานอีกครั้ง


2
darwinawards.comคุณควรมีสิทธิ์การเข้าถึง (ชั่วคราว) ในฐานะผู้ใช้ที่สามารถเขียนทับไฟล์. bashrc ของคุณหรือเปลี่ยนเชลล์เริ่มต้นของคุณเป็นอย่างอื่น "ถามผู้ดูแลระบบของคุณ" ตามที่ MS บอก

2
man 8 sshdบอกว่า9. Runs user's shell or command.เป็นขั้นตอนที่เก้า ... : - /

1
scp จะหยุดทำงานเนื่องจากเชลล์ยังคงเปิดอยู่และ. bashrc ถูกเรียก
Aleksandr Levchuk

FYI เหตุผลส่วนใหญ่ของข้อเสนอแนะเหล่านี้ไม่ทำงานเพราะ ssh เรียกใช้คำสั่งใด ๆ โดยส่งผ่านเป็นอาร์กิวเมนต์ไปยังเชลล์ของผู้ใช้ ค้นหา execve ใน session.c ไม่มีวิธีแก้ไข / เพิ่ม / ลบอาร์กิวเมนต์ของการเรียกใช้เชลล์ของผู้ใช้นี้
Mark Wagner

คำตอบ:


37

คุณสามารถพยายามที่จะยกเลิก (CTRL + C) ก่อนที่จะเป็นส่วนหนึ่งของทางออกของคุณ.bashrcจะถูกดำเนินการ

ฉันลองโดยเพิ่มสิ่งต่อไปนี้ที่ด้านบนสุดของ bashrc ของผู้ทดสอบมันใช้ได้ผลมันเป็นเรื่องของเวลา ง่ายมากในกรณีของฉัน:

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

8
+1 เนื่องจากอาจเป็นโซลูชันเดียวที่ไม่ต้องการความช่วยเหลือจากผู้ดูแลระบบ อย่างไรก็ตามโชคมากต้องมีการกำหนดเวลาที่ถูกต้อง (โฮสต์ ssh -v อาจช่วยได้เล็กน้อย)
JooMing

ที่จริง ctrl + C ทำงานได้ แม้ไม่มีการนอนหลับ ฉันวาง "exit" ลงใน bashrc ของฉันและสามารถกู้คืนได้ด้วย ctrl + C อย่างรวดเร็วหลังจากลอง 4 ครั้ง โปรดแก้ไขคำตอบเพื่อให้ฉันสามารถเปลี่ยน "-1" เป็น "+1"
Aleksandr Levchuk

@Aleksandr Levchuk ทำแล้ว
shellholic

4
ฉันซาบซึ้งมากที่การผสมผสานของเทคโนโลยีที่มีประสิทธิภาพต่ำและไร้สาระที่น่าสมเพชอย่างน่าสมเพชที่นี่
unixtippse

1
ฉันกำลังหัวเราะอย่างบ้าคลั่งการเร่งรีบเมื่อมันได้ผล ขอบคุณ @JooMing ฉันลองใช้วิธีการทั้งหมดจากที่นี่serverfault.com/questions/94503/…แม้แต่อันที่กด Ctrl + C แต่มันใช้ได้เฉพาะหลังจากเพิ่มตัวเลือก -v!
mxmlnkn

12

ฉันจัดการเพื่อทำให้ไฟล์. bashrc ของฉันยุ่งเกินไปในคลัสเตอร์ใหม่ที่ฉันได้รับสิทธิ์เข้าถึงเพื่อทดลองใช้ ไม่อยากดูเหมือน noob สิ่งสุดท้ายที่ฉันอยากทำคือขอความช่วยเหลือจากผู้ดูแลและฉันไม่สามารถทำงานได้เป็นอย่างดี ^ + C
อย่างไรก็ตามการทำงานอะไรคือส่งคำสั่ง 'rm' เป็นอาร์กิวเมนต์สุดท้ายไปที่ ssh กล่าวคือ

ssh -tv user@host rm .bashrc

ฉันไม่สามารถรับคำสั่ง 'mv' ให้ทำงานได้ (ลองมาก่อนโดยไม่มี -t) ดังนั้นฉันคิดว่าตัวเลือก -t ต้องทำ แต่คุณสามารถทดสอบได้หากคุณต้องการ ตอนนี้ฉันได้กู้คืนจากไฟล์. bashrc ~ (ทำโดย vim) ทุกอย่างแล้ว แต่บรรทัดหลบในคำถามและทุกอย่างถูกต้องในโลก! = D


2
ssh -tv user@home mv .bashrc .bashrc-oldทำงานให้ฉัน
ผู้บัญชาการรหัส

3

หากคุณสามารถเข้าสู่ระบบในฐานะผู้ใช้อื่นลองสิ่งนี้:

su user -s /bin/sh

คุณจะต้องมีรหัสผ่านแน่นอน


1
คุณสามารถลองที่แตกต่างกันไม่ได้เชลล์ตาม: kshหรือcsh
Hubert Kario

3

ถ้าฉันจำประสบการณ์เลวร้ายที่ฉันมีเช่นนี้ดูเหมือนว่า ssh, scp, sftp จะเรียกใช้ไฟล์เริ่มต้น

ข้อเสนอแนะของฉันคือใช้ FTP อย่างง่ายจากนั้นลบหรือเปลี่ยนชื่อไฟล์ไฟล์ไม่ดีบนบรรทัดคำสั่ง FTP หลังจากลงชื่อเข้าใช้ฉันถือว่าระบบของคุณอนุญาตการเข้าถึง FTP ในกรณีเช่นนี้โปรดเปลี่ยนรหัสผ่านของคุณ (อย่างปลอดภัย) เมื่อคุณซ่อมเสร็จแล้ว


Filezilla ทำงานได้อย่างสมบูรณ์แบบสำหรับสิ่งนี้ เพียงแค่ต้องเมนูแบบหล่นลง "เซิร์ฟเวอร์" และเลือกการตั้งค่า "บังคับแสดงไฟล์ที่ซ่อน"
Danny G

1

จากman ssh( OpenSSH_5.6p1อย่างน้อยไม่แน่ใจว่าเมื่อใดที่มันถูกเพิ่ม)

~/.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.

.. ซึ่งหมายความว่าคุณสามารถสร้าง~/.ssh/rcที่มีต่อไปนี้:

mv ~/.bashrc ~/bak.bashrc

จากนั้นเมื่อคุณsshเข้าสู่ระบบ bashrc ที่มีปัญหาจะถูกย้ายออกไปก่อนที่เปลือกการเข้าสู่ระบบของคุณจะเริ่มขึ้น - จากนั้นคุณสามารถแก้ไขbak.bashrcและย้ายกลับเข้าที่ได้อย่างชัดเจน


0

เชื่อมต่อผ่าน SCP หรือ SFTP และแก้ไข / เปลี่ยนชื่อ / ลบไฟล์. bashrc ของคุณได้ แก้ไข - D'oh ฉันเห็นคุณพูดว่าคุณลองแล้ว โอ้ดี


0

ฉันมีปัญหาเดียวกันและก็สามารถแก้ไขได้ ฉันใช้ ssh เพื่อเข้าถึงระบบและกด Ctrl + c ค้างไว้ทันทีที่ฉันเข้าสู่ระบบ จากนั้นไม่ได้อ่าน ~ / .bashrc และฉันสามารถแก้ไขได้


1
คำตอบที่
ตรงข้าม

0

ฉันพบว่ามันใช้งานได้

บูตโหลดเดอร์ grub โดยการกด e ... อีกครั้งกด e เพื่อป้อนบรรทัดการโหลด grub กด e อีกครั้งเพื่อแก้ไขเคอร์เนลบรรทัด

ไปที่ท้ายบรรทัด;

เพิ่ม init = / bin / bash ที่ท้ายบรรทัด

ป้อนเพื่อกลับขเพื่อบูต

มันจะเปิดเปลือกทุบตีเปิดเป็นกลุ่ม /root/.bashrc และแก้ไขตาม ออกและตอนนี้คุณจะสามารถเข้าสู่ระบบได้


0

หากคุณใช้ Homestead Vagrant ...

นี่คือวิธีที่ฉันได้รับตัวเองออกจากดองนี้

(การใช้ Git Bash บน Windows 10)

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

หมายเหตุ: รหัสผ่านเริ่มต้นคือ "คนจรจัด"

บทความเหล่านี้ช่วยฉัน:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.