我的问题是
$ ssh localhost fswatch
bash: fswatch: command not found
Run Code Online (Sandbox Code Playgroud)
当没有 SSH 命令(即 fswatch)时工作正常。
我发现 SSH 会话中的 PATH 是默认的 Mac 的
$ ssh localhost echo \$PATH
/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)
因为没有 SSH
$ echo $PATH
/Users/kyb/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)
我真的不记得我是如何设置 PATH 的,但可以肯定的是~/.bashrc,~/.bash_profile不要编辑 PATH 变量。有一个配置文件/etc/paths:
$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
Run Code Online (Sandbox Code Playgroud)
Homebrew、npm、pip 通常将程序安装到/usr/local/bin,因此所有已安装的程序都在那里,我无法通过ssh localhost command我的 MacOS 访问它们。Linux下没有问题。
所以我的问题是如何配置 OpenSSH 以使用来自/etc/paths和 的PATH/etc/paths.d?
我也尝试破解:
$ ssh localhost sh -lc 'echo empty;echo $PATH'
/usr/bin:/bin:/usr/sbin:/sbin
$ ssh localhost bash -lc 'echo empty;echo $PATH'
/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)
第一行总是空的,你不知道为什么吗?
$ ssh localhost bash -lc ':;
export PATH="$( cat /etc/paths /etc/paths.d/* | tr \\\\n : )";
echo $PATH;
fswatch --version'
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/VMware Fusion.app/Contents/Public
fswatch 1.14.0
Copyright (C) 2013-2018 Enrico M. Crisostomo <enrico.m.crisostomo@gmail.com>.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Enrico M. Crisostomo.
Run Code Online (Sandbox Code Playgroud)
这里第一个:;很重要,因为第一个命令以某种方式从执行中删除
系统:MacOS Mojave 10.14.5
ssh -V:OpenSSH_7.9p1, LibreSSL 2.7.3
bash --version GNU bash, version 5.0.7(1)-release (x86_64-apple-darwin18.5.0)
Jaa*_*ens 10
您可以配置 SSH 服务器以为客户端提供自定义环境,包括自定义PATH变量。您需要配置两件事:
~/.ssh/environment在服务器上创建包含以下内容的文件:
PATH=/Users/kyb/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)
更改 SSH 服务器配置文件/private/etc/ssh/sshd_config以包含以下行:
PermitUserEnvironment PATH,LANG
Run Code Online (Sandbox Code Playgroud)
最后,重新启动/重新加载服务器上的 SSH 守护进程。SSH 登录客户端应该可以访问您的自定义环境!
| 归档时间: |
|
| 查看次数: |
6203 次 |
| 最近记录: |