背景
我有一个 bash_profile 语句,它可以动态设置我的显示变量(我大部分时间都在使用 wifi),当我需要从我们的服务器运行一些 x windows 程序时。
if [ ! $DISPLAY ] ; then
if [ "$SSH_CLIENT" ] ; then
export DISPLAY=`echo $SSH_CLIENT|cut -f1 -d\ `:0.0
echo "The display variable has been set to:"$DISPLAY
fi
fi
问题
我的问题是,假设我打开 putty 并通过 ssh 进入 sapserver1。我的显示变量设置正确。但是!
如果我从 sapserver1 通过 ssh 进入 sapserver2,那么 sapserver2 上的显示变量将设置为 sapserver1 的显示变量。
问题
有没有办法转发或屏蔽我的工作站的连接 IP 地址,无论我 ssh 进入盒子多少次。要么这样,要么有办法传递显示变量。
答案1
你的作品有通过 ssh 进行 X 转发配置好了没有?
这是我们在这里运行的,您设置一次 DISPLAY,然后将任何进一步的 ssh 链接起来。
答案2
$DISPLAY
如果您避免设置,则会更简单~/.bash_profile
。
相反,确保PuTTY的启用 X11 转发选项已设置。SSH 现在将自动设置$DISPLAY
为合适的值。
当你从这里通过 SSH 连接到下一个服务器时,使用ssh -X
(或ForwardX11 yes
在〜/.ssh /配置),然后再次$DISPLAY
自动设置。
唯一需要注意的是,你的管理员可以禁用 X11 转发sshd_配置,因此如果这不起作用就和他们讨论。
答案3
SSH 支持远程设置变量。为此,您必须在服务器上专门将变量列入白名单,并指示客户端转发它。
脚步:
ssh 进入 sapserver2 并编辑
/etc/ssh/sshd_config
添加以下行:AcceptEnv DISPLAY
通过执行以下命令重新启动 SSH 守护程序:
service ssh restart
关闭会话。
ssh 进入 sapserver1 并编辑
/etc/ssh/ssh_config
添加以下行:SendEnv DISPLAY
现在,如果您通过 ssh 进入 sapserver2,显示变量将被转发。
请注意,这只会在显示变量可用于 SSH 客户端时才有效(因为它已设置为export
)。
如果不是,你可以使用以下命令将其提供给 SSH 客户端env
:
env DISPLAY=$DISPLAY ssh sapserver2