我们有一个使用 SSH 连接到服务器的应用程序:应用程序的网络流量(数据库、一些自定义 TCP 协议等)通过 SSH 连接进行隧道传输。
我们在服务器上使用密钥对和非特权帐户,但用户仍然可以使用他们的密钥登录服务器,或者做任何他们想做的端口重定向。
有没有办法将 SSH 服务器配置为仅允许某些隧道(受隧道的结束地址和端口限制)并禁用 shell 访问?(我们使用 OpenSSH)
[编辑]
我遇到了这篇文章,似乎删除 shell 访问权限还不够。相应地更改了标题和描述。
在我们其中一台服务器的 apache 错误日志 (/usr/local/apache/logs/error_log) 中,我们看到一个 shell 命令经常运行并抛出错误,如下所示:
sh: list_price: command not found
Run Code Online (Sandbox Code Playgroud)
list_price 是我们在 50 多个网站上的电子商务系统中使用的一个字段,当然没有任何可疑之处。问题是我们不知道这是如何传递给 shell 的——我们已经检查了 exec() 和 system() 的所有出现,但我们看不出这是如何传递的。有什么方法可以让我们更容易地检测到它的来源可能是什么,因为没有什么比我上面所说的更有意义的输出了。仅供参考,这是在运行 CentOS 5 的服务器上,有问题的站点都是 PHP。
在 bash(和其他 shell)中,可以使用 $() 和 ``(反引号)之类的东西将命令的结果插入到命令行中。
现在,如果您有类似的东西,但对于 ssh 会话,那就太好了。因此,您处于 ssh 会话中,需要来自您自己计算机的一些信息,并希望将其放入您所连接计算机的内部命令行中。
例如,假设您想直接访问 mysql 控制台。你可以使用这样的命令:
ssh user@example.com "mysql -u blub -pmypass"
Run Code Online (Sandbox Code Playgroud)
这可行,但问题是,您可以在 ssh shell 进程的命令行中看到密码。
为了解决这个安全问题,我想要这样的东西:
ssh user@example.com "mysql -u blub -p\$(ssh-on-client 'cat pass-file')"
Run Code Online (Sandbox Code Playgroud)
它将cat passfile在 ssh 客户端而不是服务器上执行。有这样的事情吗?你有什么其他技巧可以做到这一点吗?
更新:我感谢参考我的例子的答案,但除非他们回答真正的问题,否则我不会接受它们。也就是说,是否可以从 ssh 会话内与 ssh 客户端计算机进行通信。(我知道这可能构成一个可能的安全问题)
可能的解决方案:
如何找到当前对我的系统有效的时区并对其进行偏移?
我需要这些信息来抵消一些时间计算,但由于夏令时(这有效地改变了偏移量),我无法使其保持恒定。
例如,目前我的时区偏移量是 +02:00,而在冬季则是 +01:00。我需要得到它是哪一个,并以小时为单位进行抵消(例如,在这种情况下,答案应该是 2)。
我需要在 tcsh 或 bash 中执行此操作。
从命令行看起来时区没有设置(日期“+%z”返回 0)。但是,从 Web 界面时区设置为 Europe/Zagreb。我想抵消那个时区。
FreeNAS 的版本是 0.7 RC1。
我有一些生成一些输出的 shell 脚本。输出被写入文件。在我的 cronjob 中,我有它: ./myscript.sh --options > output 因为 cronjob 每周运行一次,我想保留一个输出列表,而不是在每次脚本运行时覆盖它们。所以理想情况下,我希望输出文件名作为 output_ date。日期是当前脚本运行日期。在 Unix 中,date 命令可以为您提供当前日期信息,但我如何将其集成到输出文件名中?
更新:
尝试过 Heath 和 wfaulk 的方法,效果很好。但是,当我在 cronjob 中放置相同的命令时,我开始收到错误消息:/bin/sh: -c: line 0: 在寻找匹配的 `)' 时出现意外 EOF /bin/sh: -c: line 1: 语法错误:意外的文件结尾
我知道这是由输出到名为 output_$(date +%Y%m%d) 的文件引起的,因为这是我所做的唯一更改。在cronjob中有不同的方法吗?
一个使用 *nix 的新手(我实际上在 OS X 10.5 中使用了 bash shell),我想知道这个可能非常简单的答案是什么......
当我编写一个脚本(称为 my_script)并将其保存到当前目录时,为什么我必须在其名称前放置一个句点和一个正斜杠才能运行它?像这样:
./my_script
shell 不能告诉我要从当前目录运行它吗?Windows 似乎可以处理这种情况。
干杯本
我需要以一种可以解析为 json 的方式存储目录信息。
当我做 ls -m 它给我逗号分隔值但没有用户/组/大小信息。
bash-3.2$ ls -mp
100CANON/, 2009-11-27_1540.swf, 2009-11-27_1546.swf, 2009-11-27_1551.swf, 2009-11-30_0149.png, 429355_1.sql,
429355_1.sql.zip, About Stacks.pdf, Acrobat.com.app/
Run Code Online (Sandbox Code Playgroud)
ls -l 解析有问题。
无论如何你知道我可以得到 ls -l 信息作为逗号(或任何东西)分隔值吗?
我不知道如何写标题。
我需要输出,例如:
[~]# cat file
user1
domain1.com
user2
domain2.com
user3
domain3.com
Run Code Online (Sandbox Code Playgroud)
并将其转换为输出,例如:
user1 domain1.com
user2 domain2.com
user3 domain3.com
Run Code Online (Sandbox Code Playgroud)
这里的任何帮助将不胜感激。
我收到错误:bash: ./fw_utils: /bin/ksh: bad interpreter: No such file or directory
如果我 apt-get install ksh 是替换默认显示还是仅将其安装为解释器?
如果它确实将其安装为默认值,我该如何将默认值切换回 bash?