我有一个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中哪些参数可能会影响它。
非常感谢任何帮助!
答案 0 :(得分:2)
当我使用SSH连接到Cygwin机器时,我遇到了类似的问题。我曾经没有登录的问题,直到有一天我注意到我的路径设置不正确。我花了很多年时间用ssh-host-config重新创建配置文件,只在ssh的手册页中找到我的答案:
如果指定了命令,则在远程主机上执行 登录shell。
问题是我用来连接机器的别名已被更改为自动连接到屏幕会话(screen -DR
)。这意味着如果还没有要附加的屏幕会话,则屏幕不会作为用户登录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.