ฉันจะเริ่มต้นอย่างไรเมื่อทุบตีเมื่อเข้าสู่เซิร์ฟเวอร์ของฉัน


29

ฉันมีเซิร์ฟเวอร์ Debian ที่โฮสต์ เมื่อฉันเข้าสู่ระบบผ่าน ssh ฉันได้รับการต้อนรับด้วยสภาพแวดล้อมที่ดวลจุดโทษ ฉันจะเปลี่ยนเพื่อให้ฉันเริ่มต้นในสภาพแวดล้อมทุบตีได้อย่างไร

linux  bash  debian  sh 

1
ไม่ใช่คำถามการเขียนโปรแกรมจริงๆ ในอนาคตคุณอาจต้องการที่ดีที่สุดถามคำถามเช่นนี้ในUnix / Linux
tylerl

คำตอบ:


33

ในฐานะผู้ใช้ทั่วไปคุณสามารถเปลี่ยนเชลล์ล็อกอินเริ่มต้นโดยใช้chshคำสั่ง นี่คือตัวอย่าง:

chsh -s /bin/bash

ตัวเลือกอื่นคือใช้ usermod เป็น root:

usermod -s /bin/bash username

1
usodod ทำงานเหมือนมีเสน่ห์ มีวิธีการตั้งค่าเป็นค่าเริ่มต้นเป็นทุบตีเมื่อฉันเพิ่มผู้ใช้ใหม่หรือฉันต้องเรียกใช้คำสั่งในแต่ละครั้งหรือไม่

หากคุณใช้adduserควรตั้งค่าเป็นทุบตีตามค่าเริ่มต้น /etc/adduser.confเริ่มต้นการกำหนดค่าใน useraddมิฉะนั้นระบุเปลือกอย่างชัดเจนด้วย
jordanm

5

คุณแก้ไข/etc/passwdตำแหน่งที่รายการสุดท้ายเป็นเชลล์เริ่มต้น /bin/bashทำให้มัน

หรือคุณสามารถแก้ไขค่าเริ่มต้นของระบบที่/bin/shไม่ใช่การทุบตี


1
โย่มีปัญหาอะไรกับการขับรถลง? เช่น Ubuntu ไม่เริ่มต้นที่จะเป็น/bin/sh /bin/dashและสำหรับสิ่งที่คุ้มค่าคำตอบอีกสองคำนั้นเหมือนกันและทำให้ได้ผลลัพธ์ที่ต่างกัน อะไรก็ตาม
Dirk Eddelbuettel

4
การแก้ไขด้วยตนเองของ/etc/passwdมีกำลังใจอย่างมาก ข้อผิดพลาดในการแก้ไขอาจทำให้การเข้าสู่ระบบของผู้ใช้ทุกคนต้องใช้สื่อการกู้คืนหรือการบูตเป็นโหมดผู้ใช้คนเดียวเพื่อซ่อมแซม มีเครื่องมือเช่นสำหรับการเปลี่ยนแปลงusermod /etc/passwd
jordanm

1
เรื่องไร้สาระ ใช้งาน Linux ตั้งแต่ '94 ที่นี่ /etc/passwdไม่เคยถูกจับ
Dirk Eddelbuettel

2
ดีใจที่ได้ยินว่าคุณระวังตัวมาก ไม่ใช่ทุกคนที่มี หมายเหตุอื่น ๆ เกี่ยวกับการอัปเดตของคุณซึ่งเปิดตัว/bin/bashเช่น/bin/shเดียวกับการดำเนินการด้วย--posixซึ่งอาจมีผลลัพธ์ที่ไม่พึงประสงค์
jordanm

ดูสิฉันก็เป็นนักพัฒนา / ผู้ดูแล Debian มาตั้งแต่ปี 1995 ด้วย เราเคยทุบตีเป็นค่าเริ่มต้นเราเปลี่ยนไปใช้กระสุนที่ง่ายกว่าด้วยเหตุผลหลายประการ ฉันใช้มัน/bin/bashเป็นเครื่องเชลล์มาหลายปีแล้วในทุกเครื่อง คุณต้องการอาร์กิวเมนต์ที่เป็นรูปธรรมมากขึ้น
Dirk Eddelbuettel

2

คุณต้องแก้ไขโปรไฟล์ผู้ใช้ของคุณคุณสามารถทำได้โดยตรงโดยการแก้ไข/etc/passwdไฟล์หรือคุณสามารถใช้usermodคำสั่งเพื่อทำเพื่อคุณ ไวยากรณ์ที่คุณต้องการมีลักษณะดังนี้:

usermod -s /bin/bash joeuser

1

เปลือกระบบเริ่มต้นในรุ่นอูบุนตูที่ผ่านมามีการกำหนดให้เป็น/bin/sh /bin/dashเพียงแค่เรียกใช้คำสั่งต่อไปนี้:

sudo dpkg-reconfigure dash

/bin/bashคุณสามารถเปลี่ยนกลับไปเริ่มต้นเก่า

ด้วยสิ่งนี้คุณสามารถสร้างเอฟเฟกต์ที่ต้องการของการbashเป็นเชลล์เชิงโต้ตอบได้โดยไม่ต้องเปลี่ยนการตั้งค่าของผู้ใช้ (ไม่ใช่chshหรือusermod) และมันจะใช้ได้กับผู้ใช้ทุกคนที่ตั้งค่าเชลล์ไว้/bin/shแล้ว

ข้อเสียเล็ก ๆ น้อย ๆ เพียงอย่างเดียวคือเวลาบูตของ Ubuntu อาจเพิ่มขึ้นเล็กน้อยเนื่องจากdashใช้หน่วยความจำน้อยกว่าในการโหลดและทำงานได้เร็วขึ้นเล็กน้อย (ไม่น่าแปลกใจเลยเพราะมีข้อ จำกัด ด้านฟีเจอร์) แต่ฉันคิดว่ามันจะค่อนข้างยากที่จะวัดผลนี้โดยเฉพาะอย่างยิ่งสำหรับการโฮสต์สภาพแวดล้อม

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

สำหรับข้อมูลเพิ่มเติมโปรดดู Ubuntu wiki เกี่ยวกับปัญหานี้


คุณควรแยกกรณีการใช้ออกจากกัน: /bin/shใช้เป็นล่ามสำหรับสคริปต์เชลล์ที่เข้ากันได้กับ POSIX - มันไม่จำเป็นต้องเป็นเชลล์แบบโต้ตอบที่ดีที่สุด หากคุณต้องการที่bashจะเป็นเปลือกระบบของคุณคุณควรตั้งค่าเข้าสู่ระบบเปลือกที่คุณต้องการโดยใช้chshหรือadduserโทรเหมาะสม การใช้dpkg-reconfigureเป็นตัวเลือกที่ไม่ถูกต้องหาก userA ต้องการ zsh และ userB ต้องการ bash และทั้งคู่ยืนยันว่ามี / bin / sh เป็นเชลล์เริ่มต้น
umläute

หาก userA มีการกำหนดค่าไว้อย่างชัดเจนzshและ userB bashจะต้องมี หาก userC ได้รับการกำหนดค่าให้shเขาจะมีbashซึ่งเป็นค่าเริ่มต้นปัจจุบันของ Ubuntu สำหรับผู้ใช้ใหม่อยู่แล้ว
mvp

แน่นอน แต่โซลูชันของคุณแนะนำสิ่งที่ต้องการdpkg-reconfigure zshตั้งค่าzshเป็น / bin / sh จากนั้นdpkg-reconfigure dashตั้งค่าdashเป็น / bin / sh ซึ่งเป็นประเภท deadlock ฉันส่วนใหญ่บอกว่ามันเป็นอย่างดีกว่าการตั้งค่าเข้าสู่ระบบเชลล์เพื่อเปลือกหนึ่งต้องการใช้มากกว่าจะผ่านห่วงเพื่อให้ / bin / sh เป็นเปลือกเข้าสู่ระบบที่ดี
umläute

ฉันเท่านั้นที่บอกว่าdpkg-reconfigure dashสามารถทำให้shชี้ไปมากกว่าพิการbash dashกระสุนอื่น ๆ ทั้งหมดจะยังคงอยู่เหมือนเดิม
mvp

1

สำหรับกรณีที่คุณกำลังพยายามใช้บัญชีที่ใช้ร่วมกัน (ไม่ว่าด้วยเหตุผลใดก็ตาม) และไม่สามารถเปลี่ยนเชลล์เริ่มต้นได้จากนั้นคุณสามารถเรียกใช้

ssh -t <user@hostname> bash -l

หากคุณต้องการป้องกันสภาวะแวดล้อมของคุณจากเชลล์อื่นคุณสามารถรันเชลล์นั้นก่อน ตัวอย่างเช่น

ssh -t <user@hostname> ksh -c bash -l

มันใช้งานได้ดี แต่ทำไม-lตัวเลือก?
nbkhope

@ nbkhope จะทำให้มั่นใจได้ว่า. bashrc นั้นจะทำงานให้คุณ
UKMonkey

0

ไม่ใช่chshหรือusermodทำงานให้ฉัน แต่ฉันพบว่าคุณสามารถทำได้ผ่าน PuTTY

ไปConnection > SSHและการตั้งค่าไปRemote commandbash

โปรดทราบว่าคุณจะไม่สามารถexitเชลล์เริ่มต้นของคุณมันจะปิดการเชื่อมต่อ

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