วิธีปิดการใช้งานตัวแปร SendEnv ที่ตั้งค่าใน ssh_config จาก ~ / .ssh / config


30

ฉันไม่พบที่ใดก็ได้ดังนั้นฉันจึงสงสัยว่าฉันเป็นคนเดียวที่ตีปัญหาดังกล่าว

โดยค่าเริ่มต้น ssh บน Red Hat และ Debian อย่างน้อยก็มี ssh_config พร้อมตัวเลือก SendEnv ผ่านตัวแปร LC * และ LANG ในเซสชันระยะไกล หากไม่มีการรูทที่จะเปลี่ยน / etc / ssh / ssh_config เขาจะปิดการใช้งานได้อย่างไร ดูเหมือนว่าตัวเลือก SendEnv จะมีการสะสมและฉันไม่เห็นวิธีการรีเซ็ต

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


นี่ไม่ใช่คำตอบสำหรับคำถามของคุณ แต่คุณสามารถแก้ปัญหาของคุณด้วยการเรียกใช้สคริปต์และโปรแกรมในเครื่องทดสอบผ่านenvหรือด้วยสคริปต์ตัวคลุม
Scott

2
ใช่การแก้ปัญหาเป็นไปได้ แต่ไม่สะดวก
akostadinov

คำตอบ:


18

คุณไม่ใช่คนเดียว ดังที่มีการบันทึกไว้ในssh_config(5)คุณไม่สามารถยกเลิกการตั้งค่าSendEnvได้เนื่องจาก

ตัวแปรสภาพแวดล้อมหลายตัวอาจเป็น [... ] แพร่กระจายไปทั่วหลายคำสั่ง SendEnv

หากคุณมีรูทเครื่องทดสอบคุณสามารถเปลี่ยนAcceptEnvเป็นไม่ยอมรับตัวแปรที่ลูกค้าส่งมา


4
อึฉันเห็นเพียง -F ในบรรทัดคำสั่งสามารถช่วยได้ แต่มันก็ไม่สะดวกที่จะใช้จริงๆ ดูbugzilla.mindrot.org/show_bug.cgi?id=1285
akostadinov

5

ไม่สามารถทำได้~/.ssh/configเนื่องจากSendEnvไม่สามารถเขียนทับได้

การใช้นามแฝงจะไม่ทำงานกับสคริปต์ที่เรียก ssh

อีกทางเลือกหนึ่งคือการส่งออกฟังก์ชั่น เช่นใน~/.bashrc:

function ssh() {
    LANG="en_US.UTF-8" \
    LC_ADDRESS="$LANG" \
    LC_IDENTIFICATION="$LANG" \
    LC_MEASUREMENT="$LANG" \
    LC_MONETARY="$LANG" \
    LC_NAME="$LANG" \
    LC_NUMERIC="$LANG" \
    LC_PAPER="$LANG" \
    LC_TELEPHONE="$LANG" \
    LC_TIME="$LANG" \
    LC_ALL="$LANG" \
    /usr/bin/ssh $@
}
export -f ssh

1

มีตัวเลือกSetEnvหนึ่งสามารถบังคับLANGค่าบางอย่างก่อนที่จะส่ง

หน้าคนยังบอกว่า

มันเป็นไปได้ที่จะล้างตั้งก่อนหน้านี้ชื่อตัวแปร SendEnv โดย prefixing -รูปแบบด้วย

แต่ฉันไม่ได้จัดการทำงานนี้


ดูbugzilla.mindrot.org/show_bug.cgi?id=1285ซึ่งอาจอธิบายได้ว่าทำไม-วิธีการใช้งานไม่ได้ ข้อเสนอแนะที่ดีแม้ว่าจะ hardcode LANG ระยะไกลและ vars อื่น ๆ ในการกำหนดค่า SSH ทำให้สิ่งที่คาดเดาได้มากขึ้น อาจSetEnvเป็นคำสั่งที่ใหม่กว่าเพราะไม่มีใครแนะนำเกี่ยวกับเรื่องนี้ SetEnv LANG=en_US.UTF-8
akostadinov

0

หากคุณกำลังใช้ bash คุณสามารถตั้งค่า alias ssh = 'LANG = command ssh' เพื่อปิดการใช้งาน LANG ที่ส่งผ่านไปยังเซิร์ฟเวอร์อื่น ๆ


0

คุณสามารถใช้su - youruserเมื่อคุณเข้าสู่ระบบมากกว่า ssh สิ่งนี้จะกำหนดค่าเริ่มต้นสภาพแวดล้อมสำหรับผู้ใช้

ที่จริงแล้วคุณเริ่มต้นเซสชันใหม่ด้วยสภาพแวดล้อมใหม่


คำถามคือมีสภาพแวดล้อมที่มีสติโดยอัตโนมัติ และ btw su ไม่ได้ถูกติดตั้งเสมอไป และคุณต้องพิมพ์รหัสผ่านด้วย su ไม่มีประโยชน์. มีวิธีแก้ไขปัญหาง่ายขึ้น
akostadinov

0

ตามman ssh:

 -F configfile
         Specifies an alternative per-user configuration file.  If a con-
         figuration file is given on the command line, the system-wide
         configuration file (/etc/ssh/ssh_config) will be ignored.  The
         default for the per-user configuration file is ~/.ssh/config.

ดังนั้นคุณสามารถ ssh โดยไม่ปฏิบัติตาม/etc/ssh/ssh_configโดยระบุไฟล์การกำหนดค่าเริ่มต้น (อย่างชัดเจน) บนบรรทัดคำสั่ง ( ~/.ssh/configตกลงเพื่อว่างเปล่า):

$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host

คุณสามารถสร้างชื่อแทนได้ใน~/.bashrc:

alias ssh="ssh -F ~/.ssh/config"

รีสตาร์ท bash shell จากนั้นคุณสามารถ ssh ดังนี้:

$ ssh your_user@your_host

ดูความคิดเห็นของฉันด้านบน if one supplies on command line -F, then the system wide config is ignored according to man pageจากbugzilla.mindrot.org/show_bug.cgi?id=1285 ; มันเป็นตัวเลือก แต่ไม่ใช่คุณสมบัติที่ต้องการจริงๆ
akostadinov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.