วิธีใช้ไฟล์. bashrc ที่กำหนดเองในการเข้าสู่ระบบ SSH


21

ฉันพบว่ากับ บริษัท ใหม่ที่ฉันทำงานด้วยบ่อยครั้งที่ฉันต้องเข้าถึงเซิร์ฟเวอร์ linux ด้วยอายุการใช้งานที่ค่อนข้างสั้น ในแต่ละเซิร์ฟเวอร์ฉันมีบัญชี แต่เมื่อใดก็ตามที่มีการสร้างใหม่ฉันต้องผ่านการถ่ายโอนผ่าน. bashrc ที่ยุ่งยาก เป็นไปได้ว่าในเวลาประมาณหนึ่งเดือนเซิร์ฟเวอร์นั้นจะไม่อยู่อีกต่อไป ฉันยังต้องเข้าถึงเซิร์ฟเวอร์อื่น ๆ ในช่วงเวลาสั้น ๆ (นาที) ซึ่งไม่คุ้มค่าที่จะถ่ายโอนผ่าน. bashrc ของฉัน แต่เนื่องจากฉันทำงานบนเซิร์ฟเวอร์จำนวนมากสิ่งนี้จึงเพิ่มเวลาที่สูญเปล่าไปมาก

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

ถ้าเป็นไปได้มันจะดีถ้าฉันสามารถทำสิ่งเดียวกันกับไฟล์การกำหนดค่าอื่น ๆ เช่นไฟล์ gitconfig


นี่ไม่ใช่วิธีเชื่อมต่อ แต่คุณอาจพบว่ามันมีค่า ตรวจสอบฐานใน GitHub รายละเอียดเพิ่มเติมในคำตอบนี้ในชุมชนผู้ใช้ขั้นสูง
codeforester

คำตอบ:


6

ฉันคิดว่าสิ่งที่คุณต้องการคือ (ใน. ssh / config บนเครื่องที่คุณเชื่อมต่อจาก):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

จากนั้นคุณสามารถนำไปสู่ด้วย:

source .bashrc

และเป็นความสุขของคุณ LocalCommand ดำเนินการคำสั่งบนเซิร์ฟเวอร์ที่คุณกำลังเชื่อมต่อเมื่อถึงที่นั่นก่อนที่เซสชันจริงของคุณ

ฉันจะตรวจสอบให้แน่ใจว่า sshds บนเซิร์ฟเวอร์นั้นได้รับการกำหนดค่าด้วย PermitLocalCommand yes

มีหลายวิธีที่คุณสามารถปรับแต่ง LocalCommand ที่จะทำให้มันทำงานในสภาพแวดล้อมที่เฉพาะเจาะจงของคุณ - คุณสามารถขดตัวจากเว็บเซิร์ฟเวอร์ภายในหรือดึงจากเมาท์ nfs ตัวอย่างเช่น


คู่ของบันทึกย่อ ก่อนอื่นฉันคิดว่าคุณเปลี่ยนลำดับของไฟล์ในคำสั่ง scp เนื่องจากฉันต้องการถ่ายโอน bash ของฉันไปที่เซิร์ฟเวอร์และฉันคิดว่าคุณมีการย้อนกลับ ประการที่สองคุณสามารถเพิ่ม; source /path/to/.bashrcหลังจากคำสั่ง scp เพื่อให้ได้มาโดยอัตโนมัติ ในที่สุดข้อเสียเชิงลบที่ไม่สำคัญของวิธีนี้คือฉันต้องพิมพ์รหัสผ่านสองครั้ง แต่ในที่สุดมันก็ใช้ได้ดีขอบคุณ
gsingh2011

ขอโทษสำหรับเรื่องนั้น! ออกกำลังกายจากหัวของฉันแล้วดังนั้นขอโทษเกี่ยวกับการผสมผสาน คุณสามารถตั้งค่าการตั้งค่าคีย์รหัสผ่านในสภาพแวดล้อมของคุณได้หรือไม่? เรามีสิ่งนั้นในสภาพแวดล้อมของเราและมันเป็นสิ่งที่สวยงาม ดีใจที่ใช้งานได้!
Quinn Murphy

@ gsingh2011: ที่source /path/to/.bashrcจะถูกดำเนินการบนเครื่องที่คุณกำลังเชื่อมต่อจาก คำสั่งLocalCommandไม่มีสิทธิ์เข้าถึงเซสชัน ssh
Oliver

@Oliver คุณพูดถูก ฉันได้ตัดสินโดยอัตโนมัติสำหรับการจัดหา. bashrc จากคอมพิวเตอร์ระยะไกล ฉันต้องเปลี่ยนบางสิ่งในฝั่งเซิร์ฟเวอร์ในการเข้าสู่ระบบครั้งแรก แต่สะดวกกว่าที่ฉันต้องทำก่อนมาก
gsingh2011

16

ฉันคิดว่า sshrc คือสิ่งที่คุณกำลังมองหา: https://github.com/Russell91/sshrc

sshrc ทำงานเหมือนกับ ssh แต่ก็ยังแหล่ง ~ / .sshrc หลังจากเข้าสู่ระบบจากระยะไกล

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

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


กรุณาหยุดส่งสแปมด้วยโพสต์ลิงก์เท่านั้น คุณสามารถเพิ่มความคิดเห็นได้อย่างสมบูรณ์ (ซึ่งโพสต์ที่เกี่ยวข้องกับ sshrc ของคุณคืออะไร)
Deer Hunter

3
ฉันกำลังแก้ไขปัญหาทั้งหมดอยู่!
RussellStewart

เสร็จสิ้น ครั้งแรกที่ฉันถูกล่อลวงให้โพสต์ลิงก์แบบสั้นเท่านั้น ตอนนี้ฉันรู้ดีขึ้นแล้ว
RussellStewart

1
ฉันเขียนนานมาแล้ว (ก่อน sshrc) a simil sshrc: github.com/fsquillace/pearl-sshมันมีประสิทธิภาพมากขึ้นเล็กและไม่มีการพึ่งพา xxd
user967489

1

หากคุณไม่เคยไปถึงเซิร์ฟเวอร์มาก่อนจะไม่มีรายการใน ~ / .ssh / known_hosts

คุณสามารถค้นหาโฮสต์ที่รู้จักด้วย "ssh-keygen -F" แต่คุณจะต้องทดสอบเอาต์พุต (grep) เนื่องจาก ssh-keygen ไม่ส่งคืนค่า false สำหรับ miss โปรดทราบว่าหากคุณอ้างถึงโฮสต์ด้วยตัวระบุที่แตกต่างกัน (ที่อยู่ IP, ชื่อโฮสต์, FQDN) แต่ละรายการจะถือว่าเป็นอินสแตนซ์แยกต่างหาก

คุณสามารถเขียน wrapper สำหรับ ssh ที่ถ่ายโอนสภาพแวดล้อมผู้ใช้ของคุณไปยังโฮสต์นั้นในการเข้าสู่ระบบครั้งแรก:

ssh-newenv () {ถ้า! ssh-keygen -F $ 1 | พบ grep -q "^ # host $ 1:"; จากนั้น rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; Fi; ssh $ 1; }

หากคุณต้องการทำให้มีประสิทธิภาพมากขึ้นคุณสามารถตรวจสอบการมีอยู่ของไฟล์สภาพแวดล้อมที่รู้จักแฮชหรือเครื่องหมายอื่น ๆ บนโฮสต์ระยะไกล


0

ฉันไม่รู้ว่ามีเซสชันต่อ. bashrc หรือไม่

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

อาจแค่สร้างโฟลเดอร์ที่มีการกำหนดค่าทั้งหมดของคุณด้วยพา ธ และถ่ายโอนด้วย scp

ชอบ

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

และจากนั้น

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

ที่ช่วยประหยัดเวลา


0

ฉันไม่คิดว่าเป็นไปไม่ได้ให้ที่ SSH .bashrcมีอะไรจะทำอย่างไรกับคุณ มันเป็นเชลล์ที่โหลดไฟล์นั้นไม่ใช่ ssh

ความคิดบางอย่าง:

  1. ตั้งค่าไดเรกทอรีบ้านระยะไกลของคุณเมื่อคุณเข้าสู่ระบบครั้งแรก
  2. ใช้ NFS เพื่อเมาต์โฮมไดเร็กทอรีของคุณที่มี. bashrc ของคุณบนทุกเซิร์ฟเวอร์ ด้วยวิธีนี้คุณจะมีการตั้งค่าเดียวกันทุกที่
  3. หากคุณตกลงกับตัวแปรสภาพแวดล้อมบางตัวที่ส่งไปยังเซิร์ฟเวอร์ระยะไกลคุณควรตรวจสอบSendEnvตัวเลือก (ดูssh_configหน้า man สำหรับข้อมูลเพิ่มเติม) หากตั้งค่าเซิร์ฟเวอร์อย่างถูกต้อง (เช่นมีAcceptEnvsshd_config เพียงพอ) คุณสามารถใช้SendEnvเพื่อคัดลอกตัวแปรสภาพแวดล้อมของคุณไปยังโฮสต์ระยะไกล
  4. ฉันไม่รู้ว่าใช้งานได้หรือไม่ แต่บางทีคุณอาจใช้การProxyCommandตั้งค่าผิด (ดูssh_configหน้าคน) เพื่อส่ง.bashrcไฟล์ของคุณหรือไฟล์อื่น ๆ ก่อนที่จะเชื่อมต่อกับโฮสต์ระยะไกล ที่จะต้องมีการทดสอบบางอย่าง นอกจากนี้โปรดเตรียมว่าสิ่งนี้อาจรบกวน scp

0

ฉันคิดว่าhttps://github.com/fsquillace/pearl-sshทำสิ่งที่คุณต้องการ

ฉันเขียนมานานแล้วก่อนที่จะเกิด sshrc และมีประโยชน์มากกว่าเมื่อเทียบกับ sshrc:

  • ไม่ต้องการการพึ่งพา xxd สำหรับโฮสต์ทั้งสอง (ซึ่งไม่สามารถใช้งานได้บนโฮสต์ระยะไกล)
  • Pearl-ssh ใช้อัลกอริทึมการเข้ารหัสที่มีประสิทธิภาพมากขึ้น
  • มันเป็นรหัส ~ 20 บรรทัด (เข้าใจง่ายจริงๆ!)

ตัวอย่างเช่น

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.