เปลี่ยนไดเรกทอรีเริ่มต้นเมื่อฉัน SSH เป็นเซิร์ฟเวอร์


42

ฉันสงสัยว่ามีวิธีการเปลี่ยนไดเรกทอรีเริ่มต้นที่ฉันใส่หลังจากฉัน SSH ลงในเซิร์ฟเวอร์ Ubuntu ของฉัน

99% ของเวลาที่ฉันเข้าสู่เซิร์ฟเวอร์ของฉันมันคือการเข้าถึงไฟล์ภายในไดเรกทอรีเฉพาะ:

/var/www/websites

มีไฟล์ปรับแต่งที่ฉันสามารถแก้ไขได้หรือไม่ซึ่งจะทำให้แน่ใจว่าฉันถูกส่งตรงไปยังไดเรกทอรีนี้เมื่อฉันล็อกอิน?

คำตอบ:


61

มีสองวิธีในการบรรลุเป้าหมายนี้:

  • เปลี่ยนโฮมไดเรกทอรีของคุณบนเซิร์ฟเวอร์เป็น / var / www / เว็บไซต์ (นี่ไม่ใช่ความคิดที่ดีจริงๆ)
  • เพิ่มไปยังจุดสิ้นสุดของคุณcd /var/www/websites .bashrcฉันใช้อันนี้กับหุ่นของเราเพราะฉันอยากจะอยู่ใน / etc / puppet / environment / dkaarsemaker ที่นั่นแทนที่จะเป็น homedir ของฉัน :-)

ขอบคุณ ฉันแก้ไขไฟล์ bash.bashrc ซึ่งอยู่ในไดเรกทอรี / etc ทำงานได้ดี :)
Bob Flemming

7
โอ้ฉันจะไม่ทำเช่นนั้นเพราะจะมีผลกับผู้ใช้ทั้งหมด ดีกว่าที่จะแก้ไข /home/yourlogin/.bashrc
Dennis Kaarsemaker

6
คุณอาจต้องการนำสิ่งนี้ไป.profileใช้แทน.bashrcแต่ขึ้นอยู่กับกรณีการใช้งานของคุณ .profileจะดำเนินการเฉพาะสำหรับการเข้าสู่ระบบแบบโต้ตอบ (เช่นเปลือก) แต่.bashrcยังดำเนินการสำหรับการเข้าสู่ระบบแบบไม่โต้ตอบ(เช่น scp, rsync ฯลฯ ) นอกจากนี้. profile มีแนวโน้มที่จะถูกเรียกใช้โดย shells ซึ่งไม่ใช่ bash (เช่น zsh)
phord

.bashrc จะถูกดำเนินการเมื่อคุณ "exec bash" เพื่อรีเฟรช bash ของคุณ การเปลี่ยน bashrc สำหรับกรณีการใช้งานพิเศษ (ที่นี่ล็อกอิน ssh) ไม่เป็นประโยชน์
user3123159

14

หากคุณใช้คีย์สำหรับการเข้าสู่ระบบ SSH คุณสามารถเปลี่ยนพา ธ ได้โดยcommand=ใส่รหัสต่อหน้าคีย์ในเซิร์ฟเวอร์ระยะไกล~/.ssh/authorized_keysของคุณ ตัวอย่าง:

command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key

เป็นการดีที่จะสร้างและใช้หลายคีย์สำหรับผู้ใช้เดียวกัน คีย์หนึ่งบนเซิร์ฟเวอร์อาจมีคำสั่งที่อื่นอาจไม่ - วิธีนี้คุณเลือกพฤติกรรมที่คาดหวังในเวลาเข้าสู่ระบบ คุณสามารถปิดท้ายด้วยท้องถิ่น ~/.ssh/config :

Host websites-my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key1>  #on the server key with "command"
    User webmaster

Host my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key2>  #on the server key without command
    User webmaster

นี่คือสิ่งที่จะเกิดขึ้น:

local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _

หรือ:

local$ ssh my-host
webmaster@realhostname:~$ _

3
ฉันชอบคำถามนี้เหนือคำถามที่ยอมรับ อนุญาตให้ผู้ใช้หลายคนใช้ผู้ใช้เดียวกันบนเซิร์ฟเวอร์และยังสามารถปรับแต่งสิ่งที่เกิดขึ้นเมื่อคุณเข้าสู่ระบบด้วยตัวเองมีความยืดหยุ่นมากขึ้นและถูกต้องเหมือนคนอื่น ๆ
testuser

1
คุณจะต้องระมัดระวังอย่างมากที่นี่เนื่องจากการเพิ่มคำสั่งไปที่ ~ / .ssh / authorized_keys จะมีผลกับเครื่องมืออื่น ๆ โดยยึดตาม ssh เช่น rsync, scp คำสั่งเหล่านี้จะแขวน
warunapww

1
คุณสามารถใช้$SSH_ORIGINAL_COMMANDแทน/bin/bash -lเครื่องมือในการทำงาน (ในกรณีของฉัน, hg) หรือ$SHELLถ้าคุณไม่ต้องการ hardcode เพื่อทุบตี ไม่แน่ใจว่าจะได้รับเครื่องมือและการเข้าสู่ระบบของมนุษย์เพื่อทำงานทั้งสองได้อย่างไร
mpen

เพียงแค่คำเตือน: หากคุณปิดใช้งาน PasswordAuthentication (ดูaskubuntu.com/questions/346857// ) และตั้งใจพิมพ์สตริงคำสั่งของคุณโดยไม่ตั้งใจคุณอาจล็อคตัวเองออกจากระบบ
karan.dodia

6

Openssh sshd โดยค่าเริ่มต้นยอมรับตัวแปรสภาพแวดล้อมเหล่านี้จากลูกค้า:

AcceptEnv LANG LC_*

คุณสามารถใช้มันเพื่อส่งค่าจากสภาพแวดล้อมท้องถิ่นของลูกค้าไปยังเซิร์ฟเวอร์ดังนี้:

LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server

คุณสามารถวางคำสั่ง SendEnv ใน ~ / .ssh / config เพื่อให้คุณไม่ต้องรวมไว้ในบรรทัดคำสั่ง

หากคุณวางสิ่งต่อไปนี้ใน ~ / .profile ของคุณ (เพื่อให้มีผลกับการล็อกอินแบบโต้ตอบเท่านั้นใช้. profile, เพื่อส่งผลต่อการล็อกอินทั้งหมดที่ใช้. bashrc):

if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
  cd "$LC_CDPATH";
fi

จากนั้นจะเปลี่ยนไดเรกทอรีเป็นไดเรกทอรีที่ระบุในตัวแปรสภาพแวดล้อมโดยอัตโนมัติเมื่อคุณลงชื่อเข้าใช้หากมีการระบุไว้และหากเป็นไดเรกทอรี


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