我正在尝试设置一次性 SSH 隧道,它在登录的显示屏上实例化 x11vnc。
ssh -f -t -L 5900:localhost:5900 [email protected] 'sudo /usr/bin/x11vnc -safer -once -nopw -display :0 -auth /home/user/.Xauthority'
在 /etc/sudoers 中:
user@myhost:~$ sudo cat /etc/sudoers
[sudo] password for user:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/
# instead of directly modifying this file.
#
Defaults:user !requiretty
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root ALL=(ALL:ALL) ALL
user ALL=(ALL:ALL) NOPASSWD: /usr/bin/x11vnc
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
最终结果是这样的:
Pseudo-terminal will not be allocated because stdin is not a terminal.
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 5900
Could not request local forwarding.
ebz@icarus:~ $ sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts
它确实说了bind: Address already in use
,但我认为这是不正确的和不相关的:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.1.10.1:domain *:* LISTEN -
tcp 0 0 *:ssh *:* LISTEN -
tcp6 0 0 xxxx::xxxx:xxxx::domain [::]:* LISTEN -
tcp6 0 0 [::]:ssh [::]:* LISTEN -
可以肯定地说,我们可以忽略该消息。此外,删除用户的 sudo 条目也没有任何效果。
谢谢大家。干杯。
PS 解决方案在这里 -通过 SSH 运行命令时没有 TTY。- 没用 :(
另外,附注:这与服务器有关(有关 OPENNEBULA 的自定义 LXC VMM 实现的背景)。请不要将此标记为离题,因为这是一个有效的应用程序用例。
更新
加-tt
、减-f -t
开关:
$ ssh -tt -L 5900:localhost:5900 [email protected] 'sudo /usr/bin/x11vnc -safer -once -nopw -display :0 -auth /home/user/.Xauthority'
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 5900
Could not request local forwarding.
[sudo] password for user:
但它要求输入密码?输入密码后它就可以正常工作了。
答案1
确保不在user
任何一个组中admin
,或者sudo
将 sudoers 行放在user
组行之后。
来自 sudoers 手册页
当多个条目与用户匹配时,将按顺序应用它们。如果有多个匹配项,则使用最后一个匹配项(不一定是最具体的匹配项)。