เข้าสู่ระบบโดยไม่ต้องรัน bash_profile หรือ bashrc


75

ดังนั้นสมมติว่ามีสิ่งที่พิมพ์ผิดในสิ่ง.bashrcที่ป้องกันไม่ให้เขา (หรือเธอ) เข้าสู่ระบบผ่านssh(เช่นการเข้าสู่ระบบ ssh ออกเนื่องจากข้อผิดพลาดในไฟล์) มีวิธีใดบ้างที่บุคคลนั้นสามารถลงชื่อเข้าใช้โดยไม่ต้องดำเนินการ (หรือ.bashrcตั้งแต่ที่ผู้ใช้รายอื่นทำงาน) หรือลบ / เปลี่ยนชื่อ / ทำให้ไฟล์ใช้งานไม่ได้?

สมมติว่าคุณไม่มีสิทธิ์เข้าถึงเครื่องและนี่เป็นบัญชีผู้ใช้เดียวที่มีความสามารถในการ ssh

สำหรับการอ้างอิง: .bash_profileรวมถึง.bashrc:

[[ -f ~/.bashrc ]] && . ~/.bashrc

แก้ไข: สิ่งที่ฉันได้ลอง:

ssh user@host "rm ~/.bashrc"

scp nothing user@host:/RAID/home/tom/.bashrc

ssh user@host  "/bin/bash --norc"

ทุกข้อผิดพลาด:

/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory

4
คำสั่ง scp ของคุณจะไม่ทำงานเพราะ scp จะอ่าน. bashrc เมื่อเชื่อมต่อด้วย เพื่อหลีกเลี่ยงปัญหาในอนาคตคุณอาจเพิ่มสิ่งที่ชอบ [ -z "$PS1" ] && returnไว้ที่จุดเริ่มต้นของ. /bashrc วิธีนี้ scp จะหยุดการแยกวิเคราะห์. bashrc หลังจากบรรทัดแรกและคุณจะสามารถเขียนทับได้ในกรณีฉุกเฉิน
dalloliogm

คำตอบ:


24

ฉันคิดว่าทางเลือกเดียวของคุณคือ:

  • ssh ในฐานะผู้ใช้รายอื่นและเข้าสู่บัญชีของคุณ

  • ใช้บางอย่างเช่น ftp หรือ smbclient หากเปิดใช้งานบริการที่เกี่ยวข้องบนโฮสต์

  • ค้นหาช่องโหว่แบบเปิดในบริการเครือข่ายแบบเปิดและใช้ประโยชน์จากช่องโหว่นี้ :)

  • รับผู้ดูแลระบบเพื่อแก้ไขปัญหา


4
"สมมติว่าคุณไม่มีสิทธิ์เข้าถึงเครื่องและนี่เป็นบัญชีผู้ใช้เดียวที่มีความสามารถในการ ssh"
Dennis Williamson

ฉันกำลังจะลงเส้นทางนี้ ฉันจะโพสต์โซลูชันหลังจากพบแล้ว โชคดีที่ฉันมีวิธีการโจมตีเล็กน้อย
Tom Ritter

1
ใช้ Filezilla เพื่อ SFTP ลงในเซิร์ฟเวอร์ของฉันและทำให้ฉันคงที่ ขอบคุณมากคุณช่วยฉัน ฉันมีเงื่อนไข "ทางออก 1" ใน. bash_profile ของฉันโดยไม่ได้ตั้งใจและมันทำให้ฉันต้องผิดหวัง
djangofan

117

ssh -t username@hostname /bin/sh ทำงานได้สำหรับฉัน


มันใช้งานได้ดี - ง่ายและให้เชลล์ที่คุณสามารถใช้เพื่อแก้ไขปัญหา
มอนแทนา

1
กำลังพยายามทำสิ่งนี้กับแอป Secure Shell ใน Google Chrome ( chrome.google.com/webstore/detail/secure-shell/ ...... ) แต่ไม่สามารถหาวิธีที่จะวางอาร์กิวเมนต์บรรทัดคำสั่ง เคล็ดลับใด ๆ
เบ็น

2
สิ่งนี้ไม่ได้ผลสำหรับฉัน (แม้ว่าควรจะเป็นไปตามหน้าคน) โลคัลโฮสต์รัน ubuntu 14.04.1 และเป็น ubuntu 12.04.5 บนรีโมตโฮสต์ ฉันไม่สามารถ rsync ได้เพราะเชลล์ล็อกอินของฉันคือ tcsh และบนรีโมตโฮสต์มันพิมพ์ขยะ (tcsh: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว tcsh: พยายามเริ่มจาก "/ u / levy" - ซึ่งฉันบอกว่าเป็นเพราะ ไดเรกทอรีติดตั้ง NSF) ฉันคิดว่าฉันจะแก้ปัญหาด้วยการข้ามเชลล์การเข้าสู่ระบบ แต่ไม่ได้ผล
Silvio Levy

2
ถ้าเปลือกเริ่มต้นของคุณ csh / tcsh มันจะเสมอแหล่งที่มาของคุณ.cshrc/ .tcshrcแม้สำหรับเปลือกหอยที่ไม่ใช่แบบโต้ตอบ
Brian Vandenberg

ฉันนั่งที่นี่หัวเราะลาออกด้วยความโง่เขลาของตัวเองเพื่อไปถึงจุดนี้ โซลูชันของคุณใช้งานได้ดีมาก ขอบคุณมากที่ช่วยคนจรจัดนี้ทำงานให้เสร็จลุล่วง
ijustlovemath

36

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


11
ฉันสงสัย แต่มันใช้งานได้จริง ...
rmobis

นี่คืออัจฉริยะ!
user1747134

ใช้งานได้จริง ... ขอบคุณ! วิธีการอื่นไม่ได้ผลสำหรับฉัน
Zzzach ...

บน mac มีเพียง .bash_profile นี้ทำงานให้ฉัน :)
AnneTheAgile

OMG ฉันคิดว่าฉันค้นหาอินเทอร์เน็ตทั้งหมดจากนั้นฉันตัดสินใจลองและนี่เป็นวิธีเดียวที่เหมาะกับฉัน! ขอบคุณ!
Jiahao Cai

21

ฉันใช้ CVE ที่เผยแพร่แล้วเพื่อรันคำสั่งเป็นรูทผ่านเว็บอินเตอร์เฟสในซอฟต์แวร์ตรวจสอบเครือข่ายที่ฉันติดตั้งไว้ rm /RAID/home/tom/.bashrc

จากนั้นฉันสามารถเข้าสู่ระบบและ svn ย้อนกลับการเปลี่ยนแปลงที่ฉันทำ


11
นั่นคือทั้งความยอดเยี่ยมและความล้มเหลวในเวลาเดียวกัน
MikeyB

1
@ TomRitter: โปรดระบุᴄᴠᴇการอ้างอิง
2284570

1
มันเป็น cacti รุ่น oooold ดังนั้นถ้าคุณไม่ได้ใช้งานซอฟต์แวร์อายุ 8 ปีฉันไม่คิดว่ามันจะช่วยคุณได้ และถ้าคุณใช้ซอฟต์แวร์อายุ 8 ปีฉันไม่สามารถช่วยคุณได้ ;)
Tom Ritter

15

คุณต้อง a) เริ่มต้นbashโดยไม่ต้องsource'ing ~/.bashrcหรือ~/.bash_profileb) เนื่องจากเชลล์ดังกล่าวจะไม่เป็นเชลล์การเข้าสู่ระบบแบบเต็ม / ไม่มีtty ที่แนบมาบังคับsshเพื่อแนบtty :

ssh -t user@host bash --norc --noprofile

3
วิธีนี้ใช้งานได้ แต่โปรดทราบว่าคุณจะไม่ได้รับพรอมต์ตามปกติเพียงแค่หน้าจอว่างเปล่า ลองทำlsเพื่อโน้มน้าวตัวเองว่าคุณอยู่ใน :) นอกจากนี้ยังทราบนี้จะใช้dumbระยะดังนั้นสำหรับผมแล้วนาโนไม่ทำงาน
ปริTomoiagă

7

คุณไม่มีโชค

คำสั่ง ssh ทั้งหมดรันเชลล์ล็อกอินของคุณ ssh $COMMANDรัน$SHELL -c $COMMAND, scpรัน$SHELL -c /path/to/sftp-server, ธรรมดาsshเพียงรันเชลล์ของคุณ


3
สิ่งนี้เป็นจริงสำหรับ sftp ด้วย - แม้ระบบย่อย SSH จะถูกเรียกใช้จากภายในเชลล์
lxgr

จากประสบการณ์ของฉันคุณถูกต้องแม้ว่า ssh man page จะบอกว่า "ถ้าระบุคำสั่งมันจะถูกเรียกใช้งานบนรีโมตโฮสต์แทนเชลล์ล็อกอิน" แต่ผู้โพสต์ก็สามารถแก้ปัญหาได้โดยใช้คำตอบที่ได้รับคะแนนสูงสุด (ชื่อโฮสต์ ssh / bin / sh) สิ่งที่ช่วยให้?
Silvio Levy

@Silvio คำตอบของ OP คือเขาใช้ช่องโหว่ที่ไม่เกี่ยวข้องกับ SSH
Tobu

ขวา. มีคนรายงานความสำเร็จด้วยคำตอบที่ได้รับคะแนนสูงสุดและฉันคิดว่ามันเป็น OP ฉันหวังว่ามันจะทำงานได้ - ฉันมีสถานการณ์ที่คล้ายกัน (ดูความคิดเห็นของฉันภายใต้คำตอบที่ได้รับคะแนนสูงสุดด้านบน)
Silvio Levy

6

คำตอบข้างต้นไม่สามารถข้ามเชลล์ล็อกอินของ ssh ได้ คุณสามารถส่งบรรทัดคำสั่งแบบเต็มและดังนั้นจึงรันเชลล์ระยะไกลเพื่อประมวลผลคำสั่งและตั้งค่าสภาพแวดล้อมการทำงานสำหรับคำสั่ง นั่นคือสิ่งที่เปลือกหอยมีไว้สำหรับและเป็นวิธี Unix คุณจะมีปัญหาความเข้ากันได้ทุกประเภทหากคุณพยายามเรียกใช้บางสิ่งโดยไม่มีเชลล์ เช่นเดียวกันการลองใช้ control-C ควรทำเช่นเดียวกันกับการเรียก exit ซึ่งเป็นพฤติกรรมที่คุณพยายามหลีกเลี่ยง หากทุบตีมันยังคงเป็นบั๊ก ทำไมผู้คนถึงบอกว่าหน้าคนพูดอะไรที่ต่างไปจากคำพูดเพราะมันไม่พูดอะไรเลยในหน้าคนของฉัน

นอกจากนี้ในระบบลินุกซ์ส่วนใหญ่การระบุ / bin / sh ก็ไม่เป็นไรเพราะนี่เป็นเพียง symlink ที่จะทุบตี!

ต้องการทดสอบไหม เพิ่มคำสั่ง "echo" ให้กับคุณ. bashrc และ. profile และดูว่าไฟล์ใดถูกเรียกใช้ ฉันทำ. นี่คือผลลัพธ์

ssh user@hostจะดำเนินการ. bash_profile ssh user@host /bin/bashจะดำเนินการ. bashrc แต่คิดว่าไม่ใช่แบบโต้ตอบ (ไม่มีพรอมต์) ssh -t user@host /bin/bashรัน. bashrc สองครั้ง ... หนึ่งครั้งที่ล็อกอินหนึ่งครั้งสำหรับคำสั่งที่ส่งผ่านดังนั้นการระบุเชลล์ใด ๆ จะเรียกใช้ครั้งแรกเสมอ ssh -T user@hostเหมือนกับที่ไม่ได้ระบุ -T หรือ -t เลย

ตอนนี้ถ้าคุณสังเกตเห็นระบบของฉันไม่ได้ทำงานทั้งสองไฟล์เพียงไฟล์เดียวเท่านั้น แต่โปสเตอร์ดั้งเดิมมีบรรทัดเป็น. bash_profile ที่ใช้. bashrc ดังนั้น. bashrc จะทำงานเสมอไม่ว่าอะไรจะเกิดขึ้น ไม่ควรใส่บรรทัดนั้น! หากไม่มีบรรทัดดังกล่าวคุณจะไม่มีปัญหา

คุณจะต้องหาวิธีอื่นในการค้นหาผู้ดูแลระบบ นี่คือสิ่งที่ผู้ดูแลระบบมีไว้สำหรับ


บางจุดที่ดี; ไม่มีปฏิบัติการผ่านเป็นคำสั่งที่สามารถช่วยในขณะที่คุณอธิบาย แต่ในจุดที่สงสัยบ้างถ้า/bin/sh ไม่ได้รับการดำเนินการครั้งแรกมันจะช่วยเพราะทุบตีไม่โหลดเมื่อเรียกเป็น~/.bashrc shคำตอบนี้เป็นชุดคำตอบอื่นของคุณดังนั้นโปรดลบอีกคำตอบ
mklement

3

สิ่งที่ต้องการ:

ssh host "/bin/bash --norc"

ซึ่งดูเหมือนว่าจะใช้งานได้ แต่โปรดทราบว่า PS1 ไม่ได้ตั้งค่าไว้ดังนั้นคุณจะพิมพ์คำสั่งโดยไม่ต้องแจ้งให้ทราบ

สิ่งนี้มีความได้เปรียบในการไม่ทำลายล้าง


1
มันใช้งานไม่ได้มันพยายามเข้าสู่ระบบสำเร็จก่อน แต่ไม่สามารถเข้าสู่ระบบได้ดังนั้นจึงไม่สามารถรัน bash --norc
Tom Ritter

2

ลอง

echo ^C | ssh <hostname> ' rm .bashrc'

^ C นั่นคือ control-v จากนั้น c


1
มันคือ ctrl-v และ ctrl-c ในระบบของฉัน ขอขอบคุณ! :)
mzuther

2
ssh -t user@host "bash --norc --noprofile -c '/bin/rm .bashrc'"

สิ่งนี้ใช้ได้สำหรับฉันในสภาพแวดล้อมที่ จำกัด อย่างมากเมื่อไม่มีอะไรจะทำได้ ฉันต้องระบุเส้นทางแบบเต็มไปยัง. bashrc
zbeekman

1

mashing ctrl-C ทำงานได้นานเท่าที่คุณจะได้ ctrl-C ก่อนที่. bashrc จะออก น่าเสียดายที่สิ่งนี้อาจทำได้ยากหากexitอยู่ในช่วงต้นของ. bashrc

คุณสามารถใส่ ctrl-C โดยเร็วที่สุดโดยการส่งไปยัง ssh โดยตรง:

{ echo ^C; cat /dev/tty; } | ssh -tt user@host

โปรดทราบว่า^Cพิมพ์เช่น ctrl-V แล้วตามด้วย ctrl-C

ซึ่งจะส่ง ctrl-C เดี่ยวตามด้วยอินพุตจากเทอร์มินัลการควบคุมในขณะที่-ttบังคับให้เทอร์มินัล psuedo ถูกจัดสรร ทั้งหมดบอกว่านี่ให้เปลือก (ผิดรูป) ในเครื่องรีโมตในขณะที่ข้าม. bashrc มากที่สุด


0

คุณสามารถลองเขียนทับ.bash_profileไฟล์เปล่าโดยใช้scpคำสั่ง จากสิ่งที่ฉันมี googled, SCP .bash_profileใช้เข้าสู่ระบบที่ไม่ใช่แบบโต้ตอบที่ไม่ได้อ่าน


นอกจากว่าฉัน (สมมุติ) จำโครงสร้างไดเรกทอรีผิดและมันไม่ได้ทำให้ฉันมีข้อผิดพลาดในเรื่องนี้สิ่งนี้ไม่ได้ผล - scp ยังใช้งานไฟล์
Tom Ritter

1
สิ่งที่ผู้คนไม่ได้ตระหนักคือ scp นั้นไม่ได้มีอะไรพิเศษ มันเป็นแค่คำสั่งอื่นที่ใช้กับ ssh - ซึ่งหมายถึงทุกอย่างที่เกิดขึ้นสำหรับเซสชัน ssh แบบโต้ตอบที่มีความสุขกับ scp เช่นกัน
larsks

สิ่งที่เกี่ยวกับ sftp, afaik มันเป็นระบบย่อย ssh
อัลโล

0

คุณสามารถลบไฟล์ bashrc ได้ด้วย:

ssh <hostname> rm ~/.bashrc

ปัญหาอยู่ในไฟล์. bash_profile ไม่ใช่ใน bashrc
Laurent Etiemble

1
สิ่งนี้ใช้ไม่ได้ - พยายามเชลล์ก่อนและล้มเหลว
Tom Ritter

0

หากระบบของคุณติดตั้งตามปกติแล้ว. bash_profile จะไม่ถูกรันสำหรับเชลล์ที่ไม่มีการโต้ตอบ (เช่นการรันคำสั่ง)

เนื่องจากคุณระบุว่าปัญหาอยู่ในไฟล์. bash_profile ให้ลองย้ายออกนอกทาง:

ssh user@host "mv ~/.bash_profile ~/.bash_profile_broken"

ฉันไม่คิดว่าวิธีที่ไฟล์ที่ถูกเชื่อมโยงที่สำคัญ - .bash_profile รวมถึง .bashrc = (ผมเพิ่มข้อมูลเพิ่มเติม.
ทอมริท

1
แต่สิ่งที่ Lockie แนะนำ - ซึ่งได้รับการยืนยันโดยหน้า bash man - คือเชลล์ที่ไม่มีการโต้ตอบจะไม่เรียกใช้. bashrc หรือ. bash_profile อย่างไรก็ตามแม้ว่าคุณจะส่งคำสั่งบนบรรทัดคำสั่ง ssh (เช่นในตัวอย่างนี้) bash ก็ยังคงเริ่มเป็นเชลล์ "แบบโต้ตอบ" ซึ่งหมายความว่ามันจะอ่านไฟล์. bashrc ของคุณ เป็นความคิดที่ดี แต่น่าเสียดายที่ ssh จะไม่ให้ความร่วมมือ
larsks

0

UH = 'ผู้ใช้โฮสต์ @'; ssh $ UH 'mv ~ / .bashrc ~ / letmein'; ssh $ UH

โปรดอย่าตัดและเรียกใช้เปลี่ยนuserและhostจากนั้นแก้ไขletmeinและบันทึกเป็น.bashrc


0

รุ่งโรจน์กับผู้ใช้ 60069 มันใช้งานได้สำหรับฉัน แต่ฉันใช้ไฟล์เริ่มต้นเฉพาะเชลล์. bashrc ดังนั้นการลงชื่อเข้าใช้ด้วย / bin / sh จึงเหมาะกับฉัน

อย่างไรก็ตามหากคุณอยู่ในสถานการณ์ "ไม่มีโชคเช่นนี้" ฉันขอเสนอวิธีแก้ปัญหานี้โดยยึดตามการแก้ปัญหาของผู้ใช้ 60069 และ Dennis W:

ssh -t you@host  /bin/bash --noprofile  --norc

Dennis W เสนอตัวเลือก --norc ซึ่งบางคนบอกว่าไม่ได้ผลสำหรับพวกเขา

เรียกใช้ "man bash" หรือ "man (shell ของคุณ)" เพื่อดูตัวเลือกในการปิดการใช้งานไฟล์เริ่มต้น คุณจะต้องใช้เปลือก abhorrent ในเวลาที่ใช้ในการแก้ไขปัญหา


0

วิธีอื่นในการลงชื่อเข้าใช้เซิร์ฟเวอร์ไม่มีโปรไฟล์โปรดค้นหาคำสั่งด้านล่าง
ssh -t user@host bash --noprofile

สำหรับ AWS ที่ใช้ไฟล์ pem และไม่มีผู้ใช้รายอื่น
ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile

หวังว่านี่จะช่วยได้!


-1

จากคำแนะนำและคำตอบที่ระบุไว้ด้านบนฉันจะบอกว่าไม่ใช่ไฟล์. bashrc หรือ. bash_profile นอกจากนี้ ssh manpage บอกว่าถ้าคุณระบุคำสั่งที่จะดำเนินการไฟล์โปรไฟล์ของคุณจะไม่ถูกอ่าน

ฉันขอแนะนำให้ลองดำเนินการเข้าสู่ระบบเชลล์ที่แตกต่างกัน (ksh? csh? sh?) จากเส้นทางที่แน่นอน; นอกจากนี้ระวังว่ามันอาจเป็นปัญหาที่แตกต่างกันโดยสิ้นเชิง (โควต้าเรียกใช้และอ่านสิทธิ์ในโฮมไดเร็กตอรี่ของคุณ?) ดังนั้นวิธีการด้านข้างจะดีกว่า คุณสามารถขอให้ผู้ใช้รายอื่นทำls -la $YOUR_HOME_DIRและส่งผลให้คุณทางไปรษณีย์ได้หรือไม่?

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