我正在使用 SSH 从 Windows PC 远程访问 Linux 计算机。我现在正在执行以下步骤:
C:Windows\system32> ssh username@remote-ip
(由于我已经设置了密钥类型身份验证,所以不需要密码。)
username@remote-ip:~ export DISPLAY=local-ip:10.0
username@remote-ip:~ firefox
#例子
一切运行良好。
但是每次我使用 SSH 时,都必须执行步骤 2。
我可以将该参数添加到某些配置文件(sshd 配置文件或 SSH 配置文件或 ssh 参数)中,以便我不必一直输入该参数吗?
我应该在哪里进行更改:在远程 PC(Linux)还是本地 PC(Windows)上?
答案1
一个可能的解决方案是通过服务器端 shell 的启动脚本执行此操作。
根据 shell 的不同,当 SSH 服务器以交互式 shell 启动时,它可能会或可能不会提供某些脚本。对于 Bash,脚本为~/.bashrc
。
我假设服务器端的 shell 确实会获取一些脚本。如果我是你,我会在那里定义变量。首先,我会检查是否涉及 SSH,然后如果$DISPLAY
扩展为空字符串(如果由于 而已经设置ssh -X
),那么我会设置它。代码可能是:
[ -n "$SSH_CONNECTION" ] && [ -z "$DISPLAY" ] && export DISPLAY=local-ip:10.0
$SSH_CONNECTION
在这是另一个答案。
请注意,在某些情况下,启动脚本可能会提前返回。例如这个答案,转折 3。请注意,链接的答案是关于非交互式 shell 的,而您的答案为ssh username@remote-ip
您提供了一个交互式 shell;但一般来说,启动脚本可能包含一些允许它出于某种原因提前返回的逻辑。它也可能已经包含DISPLAY=…
。如果有,则将上述代码插入末尾可能是错误的return
。如果有,则将上述代码插入开头可能是错误的DISPLAY=…
。通常,您需要了解启动脚本的逻辑并将上述代码插入正确的位置。如有疑问,请插入开头并查看是否有效。
答案2
您需要将它们添加到 shell 的启动脚本中。假设您的 shell 是 bash,您需要将其添加export DISPLAY=local-ip:10.0
到~/.bashrc
或~/.bash_login
。在本例中,可能是后者。
但是,如果它接受,您可以尝试使用-X
ssh 选项。在某些情况下,它会在远程为您设置显示。这为多个用户和多个 ssh 会话提供了支持。
演示:
$ ssh lima
$ echo $DISPLAY
$ exit
logout
Connection to lima closed.
$ ssh -X lima
$ echo $DISPLAY
localhost:10.0
如果我从家庭会话登录而其他人登录则...
$ ssh -X lima
$ echo $DISPLAY
localhost:11.0