我正在尝试通过 ssh 在 Synology NAS 上设置 git。我已经创建了 git 用户、设置了私钥身份验证并安装了 git 包。我可以使用私钥成功登录,并且 /opt/bin 中的 git 在本地(在 NAS 上)运行。
为了使其正常工作,我将 /etc/ssh/sshd_config 更改为:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitUserEnvironment yes
但我仍然无法让它远程工作。
问题似乎出在我执行远程命令时 ssh 使用的路径上。我可以确认这一点,因为当我执行
ssh [email protected] echo \$PATH
我明白了
/usr/bin:/bin:/usr/sbin:/sbin:/usr/syno/bin
这与交互式 shell 不同,它给我的是:
PATH='/opt/bin:/opt/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/syno/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin'
我创建了 .ssh/environment,内容如下
PATH='/opt/bin:/opt/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin'
但它仍然没有解决问题。看起来它的内容没有被读取。
我尝试将环境文件权限设置为 -rw------- 和 -rw-r--r-- 但同样无济于事。
我在配置中还可能缺少哪些 sshd(?) 来阻止它读取用户环境?
答案1
解决方案是尝试通过在另一个端口上运行以调试模式运行 ssh:
/usr/sbin/sshd -d -D -p 222
然后运行客户端
ssh -v -p 222
并且可以看到它确实拾取了环境。问题是 NAS 的 ssh 重启脚本
/usr/syno/etc/rc.d/S95sshd.sh restart
并没有真正重启 sshd,只是断开了现有连接,并且无法重新读取配置。重启后,配置被恢复,一切开始正常工作。