有谁知道是否有办法阻止通过 SSH 执行特定命令?
例如,假设我不希望某人能够运行firefox
或matlab
通过 SSH,但如果他们位于计算机本地,那么应该没问题。
我问这个问题主要是因为我有一个软件,其许可协议没有远程使用政策。
答案1
变化亨特·S·汤普森的回答:
在 shell 启动文件中:
if [ -n "$SSH_CLIENT" ]; then
alias matlab='echo "restricted to local users only, sorry"'
alias firefox='echo "restricted to local users only, sorry"'
fi
这并不能阻止任何人绕过这些别名,因此人们可以为每个受限制的软件创建一个 shell 脚本。
例如:/usr/local/bin/matlab
:
#!/bin/sh
if [ -n "$SSH_CLIENT" ]; then
echo 'restricted to local users only, sorry' >&2
exit 1
fi
exec /real/path/to/matlab
这不会阻止用户取消设置其SSH_CLIENT
环境变量,或直接执行实际matlab
程序。
答案2
将其添加到您的 中~/.bashrc
,这将确保只有本地人tty
才能运行该软件。
当用户通过 via 登录时ssh
,服务器会alias
在命令中添加一个 ,该命令只会回显“受限制。只能在本地运行。”
whichtty=$( ps hotty $$ | grep pts )
if [ $? -eq 0 ]; then
alias <software_name>='echo Restricted. Can only be run locally.'
else
echo
fi
SSH 会话将位于伪终端从站 ( pts
) 上,如列中所示TTY
,但并非所有pts
连接都是SSH
会话。例如,创建伪终端设备(例如xterm
或 )的程序screen
将显示为pts
。因此,此脚本的缺点是您无法从本地xterm
或screen
.
您必须从启动器运行该软件。