SSH เทียบเท่ากับ. profile / .bashrc


14

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

คำตอบ:


7

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

ดังนั้นให้ตั้งค่าโปรไฟล์ทั้งหมดในไฟล์โลคัล.<local username>-<hostname>-init.shและรันสคริปต์ด้านล่างเพื่อล็อกอินเข้าสู่รีโมตโฮสต์

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"

ฉันชอบสิ่งนี้เพราะมันไม่จำเป็นต้องมีการกำหนดค่าพิเศษใด ๆ บนเซิร์ฟเวอร์ดี!
Ramon

4

คุณสามารถกำหนดค่าของคุณ.bashrcและให้พวกเขาดำเนินการเมื่อคุณเข้าสู่ระบบเพื่อให้เป็นไปได้คุณสามารถผ่านตัวแปรสภาพแวดล้อมผ่าน ssh

.bashrc การปรับเปลี่ยน

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config การแก้ไข:

AcceptEnv ... IAMTHEGREATEST

.ssh/config การปรับเปลี่ยน (ฝั่งไคลเอ็นต์):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc การปรับเปลี่ยน (ฝั่งไคลเอ็นต์):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(ยังไม่ทดลอง แต่ควรทำ)


นั่นเป็นไปตามวัตถุประสงค์ของการตั้งค่าสิ่งต่าง ๆ โดยอัตโนมัติบนเซิร์ฟเวอร์ใด ๆ ที่เข้าใช้ OP
womble

มันไม่ใช่. มันแก้ "บัญชีผู้ใช้ฉันเข้าสู่ระบบด้วยร่วมกันโดยคนอื่น" ส่วนหนึ่งของคำถาม
krissi

นี่เกือบจะเป็นสิ่งที่ฉันทำ แต่มีความแตกต่างเดียว - แทนที่จะยอมรับว่าตัวแปรสภาพแวดล้อมจากภายนอกฉันตั้งค่าไว้ในคีย์ SSH ซึ่งหมายความว่า. ssh / authorized_keys มีบรรทัดที่ขึ้นต้นด้วย environment = "IAMTHEGREATEST = forsure" ssh-dss ...
Bron Gondwana

3

จากหน้าssh (1) man ถ้าคุณสร้างไฟล์~ / .ssh / rcมันจะถูกประมวลผลก่อนที่จะเข้าสู่ระบบเชลล์ของผู้ใช้จะถูกดำเนินการจึงให้โอกาสในการทำงาน 'ตั้งค่าล่วงหน้า' ก่อนที่จะเข้าสู่ระบบ .. ตัวอย่างที่ให้มาคือติดตั้งเครือข่ายแชร์ก่อนที่จะเข้าสู่ระบบ

หากคุณไม่ต้องการที่จะใช้แต่ละ~ / .ssh / RCไฟล์ที่คุณสามารถทำเช่นเดียวกันกับ/ etc / SSH / sshrc การทดสอบอย่างรวดเร็วเพื่อตรวจสอบชื่อผู้ใช้ของคุณโดยเฉพาะหรือวิธีการระบุตัวตนบางอย่างอาจ จำกัด ผู้ใช้รายอื่นจากการสังเกตว่านี่เกิดขึ้น

/ etc / ssh / sshrcมีที่มาเฉพาะถ้าไม่มี~ / .ssh / rcดังนั้นคุณจึงสามารถมีความซับซ้อนสองชั้นได้อย่างมีประสิทธิภาพ



พลาดที่หนึ่ง! ในขณะที่มันดูน่าสนใจสิ่งนี้จะต้องตั้งค่าแต่ละเซิร์ฟเวอร์แยกกันตั้งแต่เซิร์ฟเวอร์ฝั่งขวาใช่ไหม
Ramon

yup ฝั่งเซิร์ฟเวอร์ แต่คุณจะต้อง scp ไฟล์เดียวมากกว่าหนึ่งครั้ง ไม่มีวิธีง่ายๆในการส่งสตรีมคำสั่งที่จะประมวลผลทันทีเมื่อเข้าสู่ระบบ {Grin} ขอให้ฉันสักนิดบางทีอาจจะเขียนบางสิ่งบางอย่าง ... {ไม่ใช่วันนี้!}
lornix

2

นามแฝงถูกกำหนดและตีความโดยเชลล์

น่าเสียดายที่ไม่มีวิธีsshการส่งผ่านไปยังเปลือกระยะไกล

คุณสามารถเขียนsshwrapper ทางฝั่งไคลเอ็นต์ที่ตั้งค่าสภาพแวดล้อมที่ดีในด้านระยะไกล แต่มันจะไม่สวย


0

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


0

ทางออกหนึ่งที่เป็นไปได้คือการวางสคริปต์ของคุณที่ตั้งค่าทุกอย่างบนเว็บเซิร์ฟเวอร์ที่เซิร์ฟเวอร์อื่นทั้งหมดสามารถเข้าถึงได้

จากนั้นแต่ละเซิร์ฟเวอร์ก็ควรมีสคริปต์ขนาดเล็กเพื่อทำสิ่งต่าง ๆ เช่น:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

ด้วยวิธีนี้คุณต้องอัปเดตในที่เดียวเท่านั้น


-3

ดู. ssh / config

นี่คือตัวอย่างhttps://lookherefirst.wordpress.com/2007/12/17/a-simple-ssh-config-file/


โปรดให้รายละเอียดเพิ่มเติมเกี่ยวกับสาเหตุที่คุณคิดว่าจะช่วยได้
Zoredache

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