【问题标题】:OpenSSH on CygwinCygwin 上的 OpenSSH
【发布时间】:2013-06-29 04:00:50
【问题描述】:

我有一个 Linux 机器(Ubuntu Server 13.04),它需要在特定用户帐户下的 Windows 7 机器(安装了 cygwin)上运行作业。我已经设置了一个无密码登录,通过 openSSH 访问 Windows 机器。

我面临的问题如下:当我手动 ssh 进入 Win7 机器并启动作业时,一切都很好。但是,当我使用 ssh winuser@winmachine 命令启动作业时,我最终会连接到特权 sshd 用户 'cyg_server' 下的 Windows 机器:

$ whoami
linuxuser
$ ssh winuser@Win7
$ whoami
winuser
$ exit
$ ssh winuser@Win7 "whoami; exit"
cyg_server
>> This should be 'winuser' too.

为什么会发生这种情况?我尝试再次运行 ssh-host-config 无济于事。我也看不到 sshd_config 中哪些参数可能会影响这一点。

非常感谢任何帮助!

【问题讨论】:

    标签: cygwin openssh


    【解决方案1】:

    当我使用 SSH 连接到 Cygwin 机器时,我遇到了类似的问题。我以前登录没有问题,直到有一天我注意到我的路径设置不正确。我花了很长时间使用 ssh-host-config 重新创建配置文件,只是为了在 ssh 的手册页中找到我的答案:

    如果指定了命令,则在远程主机上执行而不是 一个登录外壳。

    问题是我用来连接机器的别名已更改为自动连接到屏幕会话 (screen -DR)。这意味着如果还没有要附加的 screen 会话,则 screen 不会作为用户登录 shell 的子进程运行,也不会继承任何相关的用户环境。

    当您将命令作为参数提供给 ssh 时,生成的命令将作为由 cyg_server 启动的进程运行。确保 SSH 命令作为登录 shell 的一部分运行应该可以满足您的要求:

    ssh winuser@Win7 "bash -l -c 'whoami; exit'"

    解释(来自 bash 手册页):

    -c string If the -c option is present, then commands are read from string.
    -l        Make bash act as if it had been invoked as a login shell.
    

    【讨论】:

    • 不知何故,我错过了 bash 人中的 -l 选项。但这就像一个魅力,非常感谢!与此同时,我通过转到 Windows 的“服务”并将“sshd”服务的登录名更改为使用我的用户来解决这个问题。这只是一个 hack,因为它将“cyg_server”链接到始终使用该特定用户帐户,这对我的设置来说是可以的,但不是通用解决方案。
    • 很高兴能提供帮助。这不是一个糟糕的 hack,但如果 shell 命令需要正确设置环境变量,就会出现问题。
    猜你喜欢
    • 2010-12-18
    • 2021-07-17
    • 1970-01-01
    • 2012-06-05
    • 2023-03-29
    • 2019-04-04
    • 1970-01-01
    • 2010-10-18
    • 2018-07-16
    相关资源
    最近更新 更多