Bash 如何不通过ssh传递区域设置
我有一些ssh的别名,例如:Bash 如何不通过ssh传递区域设置,bash,ssh,Bash,Ssh,我有一些ssh的别名,例如: alias buildWork="ssh work '~/build_app'" ssh传递导致错误的变量(如$LC\CTYPE)时出现的问题,如何防止这种情况并使用服务器配置。听起来您的ssh客户端被配置为转发区域设置。您可以通过更改配置来防止这种情况(全局文件通常为/etc/ssh/ssh\u config): 或者,您可以通过在远程计算机上编辑/etc/ssh/sshd\u config来更改服务器的配置(注意sshd\u config中的d): 简言之:
alias buildWork="ssh work '~/build_app'"
ssh传递导致错误的变量(如
$LC\CTYPE
)时出现的问题,如何防止这种情况并使用服务器配置。听起来您的ssh客户端被配置为转发区域设置。您可以通过更改配置来防止这种情况(全局文件通常为/etc/ssh/ssh\u config
):
或者,您可以通过在远程计算机上编辑/etc/ssh/sshd\u config
来更改服务器的配置(注意sshd\u config
中的d):
简言之:
$ touch ~/.ssh/config
$ ssh -F ~/.ssh/config your_user@your_host
有关详细信息,请参阅
To stop sending Environment Variables via sftp
Tested on CENTOS 7
- create file config in ~/xyzuser/.ssh/config
- set permission to 600 ~/xyzuser/.ssh/config
- Put the following content in the file
comment the below lines commented to disable env variables#########
- Send locale-related environment variables
SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE
SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
SendEnv XMODIFIERS
Running without the ~/xyzuser/.ssh/config
sftp -v xyzuser@destinationhost
-------------------truncated output--------
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending subsystem: sftp
Running with the ~/xyzuser/.ssh/config
sftp -v -F /home/xyzuser/.ssh/config xyzuser@destinationhost
----truncated----------
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending subsystem: sftp
Connected to destinationhost
停止通过sftp发送环境变量
在CENTOS 7上测试
-在~/xyzuser/.ssh/config中创建文件配置
-将权限设置为600~/xyzuser/.ssh/config
-将以下内容放入文件中
注释以下注释行以禁用环境变量#########
-发送与区域设置相关的环境变量
SendEnv LANG信用证类型信用证数字信用证时间信用证核对信用证货币
发送信用证纸质信用证姓名信用证地址信用证电话
SendEnv LC_标识LC_所有语言
SendEnv XMODIFIERS
在没有~/xyzuser/.ssh/config的情况下运行
sftp-vxyzuser@destinationhost
-------------------截断输出--------
debug1:不再请求-sessions@openssh.com
debug1:进入交互式会话。
debug1:发送环境。
debug1:发送env LANG=en_US.UTF-8
debug1:发送子系统:sftp
使用~/xyzuser/.ssh/config运行
sftp-v-F/home/xyzuser/.ssh/configxyzuser@destinationhost
----截断的----------
调试1:通道0:新建[客户端会话]
debug1:不再请求-sessions@openssh.com
debug1:进入交互式会话。
debug1:发送子系统:sftp
已连接到destinationhost
接受的答案是正确的,但是,如果不想更改配置文件,可以在命令行上覆盖特定的区域设置
LC_TIME="en_US.UTF-8" ssh user@example.com
我遇到了一个问题,我认为ssh传递了区域设置,所以我尝试在客户端站点上禁用它,然后在服务器站点上禁用它(如上所述),但是区域设置在登录后仍在抱怨 结果是目标服务器本身的区域设置很混乱,设置取自
/etc/default/locale
我必须彻底清理它,运行
#dpkg reconforme locales
,解决了这个问题。正如在其他答案中已经解释的那样,客户端将通过/etc/ssh/ssh\u config
中的SendEnv
发送所有指定的环境变量。您还可以使用用户的配置强制ssh
不发送已定义的变量名
发件人:
可以通过在模式前加-来清除以前设置的SendEnv变量名。默认情况下,不发送任何环境变量
因此,为了防止发送区域设置,您可以将以下内容放入~/.ssh/config
:
# comment out / remove the following line
SendEnv LANG LC_*
# comment out / remove the following line
AcceptEnv LANG LC_*
SendEnv -LC_* -LANG*
我没有测试的方法,但是
(unset LC\u CTYPE;ssh…)
可能会工作。这将临时取消设置子shell中的LC_CTYPE((…)
),然后运行ssh…
命令。祝你好运。谢谢你的解释!你真棒!请试着回答这个问题,而不是复制粘贴。那个问题解决了。问题是为什么不采用用户配置而采用全局配置?@crsuarezf采用的是用户配置,但如果不使用-F
,它也采用全局配置,而不是完全忽略它。从:中,如果在命令行中提供了配置文件,则系统范围的配置文件(/etc/ssh/ssh\u config)将被忽略
我已经有了一个~/.ssh/config
文件,因此所有这些操作都是更新该文件上的时间。而无法识别的局部变量仍会传递给主机。至少现在我在man
页面上找到了一些东西。这似乎是最清晰的答案,但我无法让它发挥作用。以下内容对我来说起到了作用,覆盖了/etc/ssh/ssh\u config
中的设置:SetEnv LANG=“”
我终于找到了这是它对我不起作用的原因。他们解决了这个问题,但并没有真正解决问题:这简直是疯了。Debian和Ubuntu等衍生工具,用于以普通用户无法阻止的方式设置SendEnv
——只有root
可以改变这一点。显然是一只虫子,到今天为止,我们的Ubuntu18.04系统还没有得到修复(它们运行openssh 7.6p1)。因此,实际的解决办法是升级到一个较新的Debian或基于Debian的版本,然后这个答案就行了。