วิธีรันคำสั่งอัตโนมัติในการเข้าสู่ระบบ SSH


18

เมื่อใดก็ตามที่ฉันเข้าสู่ระบบเซิร์ฟเวอร์ Linux ฉันต้องการให้คำสั่งหลายคำสั่งทำงานโดยอัตโนมัติ (ตั้งค่าตัวแปรเปลี่ยนตำแหน่ง ฯลฯ )

สิ่งนี้จะต้องทำในการเข้าสู่ระบบของผู้ใช้ไม่ใช่ในการเริ่มต้นระบบ

ฉันจะตั้งให้ทำเช่นนี้ได้อย่างไร


คุณต้องอ่านหัวข้อ INVOCATION ใน bash (1) ( man bash)
Andrew Schulman

คำตอบ:


31

~/.bashrcใส่คำสั่งใน ทุกอย่างในนั้นจะถูกดำเนินการทุกครั้งที่คุณเข้าสู่ระบบ

หากคุณต้องการคำสั่งให้ทำงานเมื่อลงชื่อเข้าใช้ผ่านทาง ssh เท่านั้น (แต่ไม่ใช่เมื่อลงชื่อเข้าใช้ทางกายภาพ) คุณอาจทดสอบการมีอยู่ของSSH_CONNECTIONตัวแปรสภาพแวดล้อมและรันคำสั่งเฉพาะเมื่อคุณพบว่ามีอยู่


ฉันไม่ได้เข้าสู่ระบบในฐานะ root เป็นเซิร์ฟเวอร์ AWS ดังนั้นฉันต้องเข้าสู่ระบบในฐานะ "ผู้ใช้ ec2" จากนั้นเปลี่ยนเป็นรูทโดยใช้ "sudo su -" ดังนั้นฉันควรใส่คำสั่งใน "/home/ec2-user/.bashrc" หรือไม่

5
สิ่งนี้ถือว่า ~ / .bashrc มีที่มาจาก ~ / .bash_profile ของคุณ ~ / .bash_profile จะเป็นสคริปต์ที่ถูกเรียกใช้สำหรับเชลล์ล็อกอินเช่น ssh ฉันเชื่อว่า ~ / .bashrc จะถูกเรียกถ้าคุณเปิด Gnome Terminal เช่นหลังจากที่ลงชื่อเข้าใช้แล้ว
dgrant

คุณสับสนฉันให้ฉันอธิบายเพิ่มเติม: นี่เป็นอินสแตนซ์ของ Amazon Web Services ซึ่งเป็นเซิร์ฟเวอร์จริงดังนั้นจึงไม่มีใครลงชื่อเข้าใช้ทางกายภาพเลย (ฉันไม่แน่ใจว่ามันมีอยู่จริงในเครื่องเดียวหรือไม่) ฉันเข้าสู่ระบบโดยใช้ PUTTY ด้วยชื่อผู้ใช้ ec2-user สิ่งนี้จะทำให้ฉันอยู่ในไดเรกทอรี / home / ec2-user ฉันเปลี่ยนเป็นผู้ใช้รูทด้วยการพิมพ์ "sudo su -" ซึ่งทำให้ฉันเป็น "/ root" จากนั้นฉันต้องพิมพ์ชุดคำสั่งรวมถึงการเปลี่ยนฉันกลับไปเป็น "/ home / ec2-user" และตั้งค่าบางอย่าง ตัวแปร, นามแฝง, ฯลฯ ดังนั้น ... ฉันจะทำมันอย่างไร?

นอกจากนี้เนื่องจากฉันกำลังเปลี่ยนผู้ใช้ฉันคาดหวังว่าในโปรไฟล์ทุบตีผู้ใช้ ec2 ฉันควรใส่เฉพาะ "sudo su -" แล้วคำสั่งอื่น ๆ ที่เหลือในไฟล์ root ทุบตี?

หมายเหตุ: จริงๆแล้วมันเป็น. profile ที่ได้รับการเรียกถ้ามันมีอยู่เว้นแต่. bash_profile นั้นมีอยู่มันจะถูกเรียกแทน
dgrant

14

เพียงใส่นี่ใน ~ / .bashrc หรือ /etc/bash.bashrc หากคุณต้องการสิ่งนี้สำหรับผู้ใช้ทั้งหมด:

if [[ -n $SSH_CONNECTION ]] ; then
    echo "I'm logged in remotely"
fi

และฉันจะสูญเสียเซสชั่นได้อย่างไรหลังจากปิดการดำเนินการ?
e-info128

1
@WHK คุณหมายถึงการสูญเสียเซสชั่น?
Llamageddon

@Llamageddon: ฉันคิดว่าเขาสงสัยในสิ่งเดียวกันกับฉัน ถ้าฉันต้องการที่จะใส่เซสชั่น SSH ทั้งหมดของscreenฉันฉันอาจใช้คำตอบของคุณและใส่ที่screenนั่นแทนเสียงสะท้อน ปัญหาที่เกิดขึ้นคือการสิ้นสุดเซสชันหน้าจอจะกลับสู่พรอมต์ SSH แทนการออกจากระบบ เพียงแค่เขียนความคิดเห็นนี้ให้ฉันคำตอบ แต่: เพิ่มlogoutคำสั่งหลังscreenคำสั่ง
zondo

อย่างไรก็ตามนี่ใช้ไม่ได้กับเซสชัน ssh ซึ่งไม่ได้ใช้ bash เช่นเมื่อฉันเปิดเซสชัน sftp
ฟาบิโอ

@zondo @ e-info128 exec commandจะแทนที่เชลล์ปัจจุบันด้วยสิ่งที่คุณเรียกใช้
Llamageddon

6

หรือคุณสามารถระบุคำสั่งที่จะเรียกใช้ในระหว่างการเรียกใช้ssh:

$ ssh -t server 'cmd; exec bash -l'

คำสั่งสุดท้ายในรายการควรเริ่มเซสชันแบบโต้ตอบในเชลล์ที่คุณต้องการ หากคุณมีคำสั่งจำนวนมากให้เรียกใช้สร้างไฟล์สคริปต์บนเซิร์ฟเวอร์ SSH ของคุณ


1
สิ่งนี้มีประโยชน์มาก ไม่แน่ใจว่าเป็นคำตอบที่ผู้ถามถามหรือไม่ แต่ผู้คนควรรู้เพราะอาจไม่ชัดเจน ตัวอย่างเช่น "ssh user @ host" export x = 5; ทุบตี" จากนั้นใน terminal ที่ปรากฏขึ้น echo $ x แสดง 5.
Clearlight

3

ที่จริงแล้ว~/.ssh/rcเป็นสถานที่ที่เหมาะสมสำหรับคุณในการเพิ่มคำสั่งให้ทำงานเมื่อคุณลงชื่อเข้าใช้แทนที่จะเป็นผู้ใช้ระบบใด ๆ

 ~/.ssh/rc
         Commands in this file are executed by ssh when the user logs in,
         just before the user's shell (or command) is started.  See the
         sshd(8) manual page for more information.

ไม่จำเป็น. มันเป็นสถานที่ที่คำสั่งที่สามารถวาง
Daniel B


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