ฉันใช้พรอมต์ "PS1" เฉพาะที่ฉันชอบ ฉันแบ่งปันการเข้าสู่ระบบสองสามครั้งกับผู้อื่นในเซิร์ฟเวอร์อื่น ๆ ฉันสงสัยว่ามีวิธีระบุในโพรไฟล์ bash ภายในเครื่องของฉันพร้อมท์รีโมตหรือวิธีอื่นแล้วคัดลอกและวางทุกครั้งที่รีโมต
ฉันใช้พรอมต์ "PS1" เฉพาะที่ฉันชอบ ฉันแบ่งปันการเข้าสู่ระบบสองสามครั้งกับผู้อื่นในเซิร์ฟเวอร์อื่น ๆ ฉันสงสัยว่ามีวิธีระบุในโพรไฟล์ bash ภายในเครื่องของฉันพร้อมท์รีโมตหรือวิธีอื่นแล้วคัดลอกและวางทุกครั้งที่รีโมต
คำตอบ:
อัปโหลดไฟล์ในแต่ละเครื่องระยะไกลพูด~/.my_custom_bashrc
ด้วยการกำหนดbash
ค่าของคุณ(ในกรณีนี้PS1=...
) แล้วเปิดssh
ด้วย:
ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"
คุณสามารถใช้bash
ฟังก์ชั่นเป็นตัวหุ้มเพื่อให้อ่านง่าย
หากคุณเพียงแค่ต้องการส่งPS1
ตัวแปรและมันไม่มี'
(อัญประกาศเดี่ยว) ให้ลอง:
ssh targethost -t "PS1='$PS1'; exec bash"
คนในพื้นที่.bashrc
อาจเขียนทับได้ดีPS1
(ขอบคุณเดนนิสวิลเลียมสันที่ชี้เรื่องนี้)
มีวิธีการส่งตัวแปรสภาพแวดล้อมบน sshแต่โดยทั่วไปแล้วพวกเขาจะปิดการใช้งานในการกำหนดค่าเซิร์ฟเวอร์ หากPermitUserEnvironment
คำสั่งถูกเปิดใช้งานในการกำหนดค่าเซิร์ฟเวอร์และผู้ใช้แต่ละคนมีคู่คีย์ของตัวเอง (ใช่คุณอาจไม่โชคดีมาก) คุณสามารถเพิ่มลงenvironment="PS1=…"
ในบรรทัดที่~/.ssh/authorized_keys
สอดคล้องกับคีย์ของคุณ
หากคุณต้องการเก็บการกำหนดค่าของคุณเองในบัญชีผู้ใช้ที่ใช้ร่วมกันคุณสามารถสร้างไดเรกทอรีไฟล์การกำหนดค่าของคุณเองและตั้งค่าHOME
ตัวแปรสภาพแวดล้อมให้ชี้ไปที่ไดเรกทอรีนั้น
ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/
สร้างลิงก์สัญลักษณ์ในmrstatic.home
ไดเรกทอรีที่ชี้กลับไปยังรายการที่เกี่ยวข้องในไดเรกทอรีหลักเมื่อคุณต้องการแชร์ไฟล์กับผู้ใช้รายอื่น
จากนั้นเข้าสู่ระบบด้วย
ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`
หากคุณยินดีที่จะแก้ไขระยะไกล.profile
(หรือไฟล์เริ่มต้นอื่น ๆ ) คุณสามารถทำการตั้งค่าของคุณได้โดยอัตโนมัติ ไซต์จำนวนมากอนุญาตให้มีLC_*
ตัวแปรสภาพแวดล้อมผ่าน (โดยปกติจะใช้สำหรับการตั้งค่าภาษา) หากทั้งสองเงื่อนไขเหล่านี้คุณสามารถตั้งค่าตัวแปรที่ไม่ได้นำมาใช้จริงสำหรับสถานที่พูดในด้านลูกค้าและการทดสอบในเซิร์ฟเวอร์LC_USER
.profile
(แน่นอนว่าบัญชีที่ใช้ร่วมกันเป็นความคิดที่ไม่ดี แต่ฉันรู้ว่าคุณอาจไม่สามารถเปลี่ยนสถานการณ์นั้นได้)
ssh -t user@host "remote='$PS1' bash -i"
จากนั้นที่พร้อมต์:
PS1=$remote
PS1
การเขียนทับในระหว่างการเริ่มต้นเชลล์ ไม่มีผู้บริหาร: ระหว่างการทดสอบระบบของฉันดูเหมือนจะไม่ได้สร้างความแตกต่าง - ไม่มีกระบวนการพิเศษ
.bashrc
PS1
ใส่พรอมต์ PS1 ของคุณใน ~ / .ssh / environment และ ssh session จะส่งไปยังทุก ๆ โฮสต์ที่คุณล็อกอิน มันทำงานได้สำหรับฉันด้วย openssh 4.3p2
PermitUserEnvironment
ซึ่งจะปิดตามค่าเริ่มต้น
คุณสามารถระบุตัวแปรสภาพแวดล้อมในฝั่งไคลเอ็นต์และหาก ssh-server อนุญาต (ตรวจสอบคน sshd-config) ตัวแปรเหล่านี้จะถูกคัดลอกไปยังเซสชันเมื่อคุณเข้าสู่เครื่อง
ดังนั้นคุณจะต้องกำหนดค่า. bashrc บนเซิร์ฟเวอร์เพื่อตรวจสอบ PS1 ที่มีอยู่ (หรือตัวแปรอะไรก็ตาม) และตั้งค่า PS1 เฉพาะเมื่อไม่ได้ตั้งค่าไว้แล้ว
หรือซึ่งทำให้สิ่งต่าง ๆ ง่ายขึ้นคุณรวมการตั้งค่าของคุณไว้ในฟังก์ชั่น .. และปรับใช้ฟังก์ชั่นนั้นเป็นไฟล์พิเศษที่คุณต้องการ ( source joes_bashrc
) หรือโดยตรงไปยัง. bashrc การมีไฟล์ของคุณเองดูจะแข็งแกร่งกว่านี้เล็กน้อย คนอื่นอาจใช้การตั้งค่าของคุณ แต่ไม่ได้บังคับให้ทำเช่นนั้น
อย่าแชร์การเข้าสู่ระบบ SSH เป็นตัวของคุณเองจากนั้นทำsudo -su shareduser
( -s
หมายถึง "เปลือก")
ทำให้sudo
ไดเรกทอรีบ้านของคุณ:
Defaults env_keep += "HOME"
หากคุณต้องการทำมันโดยไม่จำเป็นต้องมี scp เพิ่มเติมคุณสามารถทำสิ่งนี้:
ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'
นั่นจะสร้าง. bashrc.n ซึ่งขึ้นอยู่กับเซิร์ฟเวอร์ bashrc แต่มีการแทนที่ของคุณ
หากคุณยินดีที่จะก้าวก่ายแทบเพื่อนร่วมงานของคุณและคุณสามารถไว้วางใจพวกเขาไม่ได้เข้าไปยุ่งเกี่ยวกับการตั้งค่าของคุณแล้วผมขอแนะนำการรวมกันของคำตอบของไซรัส , คำตอบของอากิระและคำตอบที่เดนนิสวิลเลียมสัน
~/.bashrc
และเพิ่มif ["$ Unf" = 1] # รหัสพิเศษสำหรับ Unfundednut แล้วก็ PS1 = " (พรอมต์ที่คุณต้องการ) " (การปรับแต่งอื่น ๆ ที่คุณต้องการ) fiในตอนท้าย ในขณะที่เพื่อนร่วมงานของคุณ“ จะไม่ขอบคุณ [คุณ] ที่เขียนทับโปรไฟล์ฐาน” พวกเขาจะไม่ตระหนักถึงสิ่งนี้จนกว่าพวกเขาจะไปหามัน
ssh -t user @ host "Unf = 1 bash -i"ในขณะที่คุณอาจต้องการใส่สิ่งนั้นลงในฟังก์ชันนามแฝงหรือเชลล์ในบัญชีท้องถิ่นของคุณมันสั้นพอ - สั้นกว่าคำตอบอื่น ๆ ที่คุณสามารถพิมพ์ได้ด้วยตนเองอย่างง่ายดาย
ฉันเชื่อว่านี่ค่อนข้างชัดเจน แต่: ssh
คำสั่งทำให้Unf
ตัวแปรถูกตั้งค่าบนเซิร์ฟเวอร์ระยะไกลเมื่อคุณเข้าสู่ระบบ ที่จะเรียกใช้รหัสของคุณในระยะไกล.bashrc
ซึ่งจะทำให้การปรับแต่งของคุณมีผล เนื่องจากคุณใส่รหัสของคุณในตอนท้าย.bashrc
มันจะแทนที่การตั้งค่าทั่วไปก่อนหน้าในไฟล์
การเปิดเผย: ฉันไม่ได้ทดสอบสิ่งนี้
วิธีที่ง่ายที่สุดคือ IMHO:
ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'
PROMPT_COMMAND
(ซึ่งดำเนินการทุกครั้งที่เชลล์ออกพรอมต์) ดูเหมือนจะเป็นวิธีที่หนักมากในการแก้ไขปัญหานี้ และเนื่องจากมันค่อนข้างลึกลับคำตอบใด ๆ ที่แนะนำว่าควรมีคำอธิบายว่ามันทำงานอย่างไร
คุณสามารถทำสิ่งต่าง ๆ เช่นการติดตั้งที่บ้านของคุณผ่าน sshfs / nfs แต่ทางออกที่ง่ายที่สุดคือการ scp bashrc ของคุณไปยังเครื่องใหม่ สิ่งนี้ยังนำนามแฝงและสิ่งของมาด้วย
"PS1='$PS1' bash -i"
(และทำไมไม่exec
เช่นกัน)?