微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

登录FreeBSD ssh时使用bash shell

我正在寻找一种方法来确保我的命令是由一些使用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"'

在FreeBSD 11上输出一个命令似乎是一个csh错误信息

Unmatched ".

检查哪个shell运行时,似乎csh运行.以下内容返回’csh’

ssh -i /home/user/.ssh/some_key user@freebsd11 'bash -c "echo $0"'

根据我的理解,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'

这个解决方案可以工作,但是很麻烦,建立2个连接而不是一个,如果远程由于某种原因无法写入’somefile’,则无法工作.

如果简化命令行,shell可能无关紧要.这应该可行
ssh </some/filelist -i /home/user/.ssh/some_key user@freebsd11 xargs -n 1 stat -f \"%N;%c;%m\" | sort

或者,您可能希望将正在使用的特定用户认shell更改为bash – 请参阅chsh(1)命令.

原文地址:https://www.jb51.cc/bash/385545.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐