มีวิธีการข้ามหรือป้องกันการดำเนินการของ~/.profile
เมื่อเข้าสู่เซิร์ฟเวอร์ Linux ระยะไกลโดยใช้ ssh หรือผงสำหรับอุดรู?
มีวิธีการข้ามหรือป้องกันการดำเนินการของ~/.profile
เมื่อเข้าสู่เซิร์ฟเวอร์ Linux ระยะไกลโดยใช้ ssh หรือผงสำหรับอุดรู?
คำตอบ:
หากคุณกำลังมองหาที่จะปิดการใช้งานสคริปต์การเข้าสู่ระบบที่ทุกท่านสามารถใช้--noprofile
ธงเพื่อปิดการใช้งาน/etc/profile
, ~/.profile
ฯลฯ และ--norc
จะปิดการใช้งาน~/.bashrc
เช่นดังนั้น:
$ ssh 127.0.0.1 "bash --noprofile --norc"
โปรดทราบว่าคุณสามารถเปิดเปลือกอื่นได้หากมีอยู่ ฉันต้องใช้สิ่งนี้หลังจากเลอะในchsh
:
$ ssh 127.0.0.1 sh
การทำเช่นนี้จะส่งคุณไปที่เชลล์ว่างเปล่า (ไม่มีพรอมต์) ดังนั้นให้กำหนดls
เพื่อให้แน่ใจว่าใช้งานได้
หากเครื่องเป้าหมายของคุณอยู่ใน bash shell:
user@host:/$ ssh hostname "bash --noprofile"
หรือหากมีโปรไฟล์อื่นที่คุณต้องการใช้
user@host:/$ ssh hostname "bash --noprofile; source ~/.other_profile"
นอกจากนี้ลองใช้โปรแกรม FTP เช่น WinSCP เพื่อลบไฟล์เข้าสู่ระบบที่ผิดพลาด นี่จะเป็นการละทิ้ง แต่อย่างน้อยคุณควรจะสามารถเข้าสู่เชลล์เริ่มต้นได้
ดังที่คนอื่น ๆ ได้กล่าวไว้การใช้bashกับ--noprofile
แฟล็กเมื่อคุณเริ่มการเชื่อมต่อจะใช้งานได้แม้ว่าคุณจะใช้เชลล์ตัวอื่นอาจเป็นตัวเลือกหรือไม่ก็ได้
อีกทางเลือกหนึ่งคือให้สคริปต์โปรไฟล์ตรวจจับการเชื่อมต่อ SSH และทำงานตามนั้น เนื่องจากการเชื่อมต่อ SSH มักจะตั้งค่าตัวแปรสภาพแวดล้อมจำนวนหนึ่งจึงสามารถตรวจสอบได้อย่างง่ายดาย การเพิ่มบางอย่างเช่นบรรทัดต่อไปนี้ในจุดเริ่มต้นของโปรไฟล์ของคุณควรจะพอ
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
return
จะข้ามส่วนที่เหลือของสคริปต์ถ้า$SSH_CONNECTION
ตัวแปรสภาพแวดล้อมมีการตั้งค่าซึ่งตามปกติจะถูกสร้างขึ้นเมื่อใดก็ตามที่มีการเชื่อมต่อ SSH จะเริ่ม ไม่เช่นนั้นโปรไฟล์จะทำงานเหมือนปกติ
โปรดทราบว่านี่จะเป็นการข้ามสคริปต์โปรไฟล์ที่ได้รับผลกระทบเท่านั้น สคริปต์โปรไฟล์อื่น ๆ ทั้งหมด (เช่น:) /etc/profile
จะยังคงถูกประมวลผลจนกว่าคุณจะแก้ไขในทำนองเดียวกัน