Ors*_*ong 5 freebsd ssh shell bash bsd
我正在寻找一种方法来确保我的命令在某些使用 csh 作为默认 shell 的 FreeBSD 11 机器上由 bash 执行。
以下是我在 Linux CentOS / Debian / MacOS X / pfSense 2.3(在 FreeBSD 10.3 上运行)甚至 Windows 10 bash 上运行的代码,但在 FreeBSD 11 上不起作用
cat "/some/filelist" | ssh -i "/home/user/.ssh/some_key" user@freebsd11 'bash -c "while read -r file; do stat -f \"%N;%c;%m\" \"\$file\"; done | sort"'
Run Code Online (Sandbox Code Playgroud)
FreeBSD 11 上前一个命令的输出似乎是一个 csh 错误消息
Unmatched ".
Run Code Online (Sandbox Code Playgroud)
在检查哪个 shell 运行时,似乎是 csh 运行。以下返回“csh”
ssh -i /home/user/.ssh/some_key user@freebsd11 'bash -c "echo $0"'
Run Code Online (Sandbox Code Playgroud)
根据我的理解,BSD 系统不允许更改 shell,除非使用 heredoc,但我不能使用 heredoc 发送 cat "/some/filelist" 。
当然,bash已经安装好了,可以执行了。我对更改 FreeBSD 上用户的默认 shell 不感兴趣。
这里有什么想法吗?
我最好的猜测是划分问题:
1/ 发送文件 cat /some/filelist | ssh [..] 'cat > somefile'
2/在heredoc中使用发送的文件
ssh [..] 'bash -s' << 'EOF'
while read -r file; do stat -f "%N;%c;%m" "$file" | sort; done < "$somefile"
'EOF'
Run Code Online (Sandbox Code Playgroud)
这个解决方案可以工作,但很混乱,建立 2 个连接而不是一个连接,如果由于某种原因远程无法写入“somefile”,则将无法工作。
小智 3
如果简化命令行,shell 可能就不再重要了。这应该可行
ssh </some/filelist -i /home/user/.ssh/some_key user@freebsd11 xargs -n 1 stat -f \"%N;%c;%m\" | sort
Run Code Online (Sandbox Code Playgroud)
或者,您可能希望将您要通过 ssh 访问的特定用户的默认 shell 更改为 bash - 请参阅 chsh(1) 命令。
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |