相关疑难解决方法(0)

使用ssh,如何在不退出的情况下在远程机器上运行命令?

通常,如果您像这样将命令传递给 ssh

ssh me@example.com 'some-command.sh'
Run Code Online (Sandbox Code Playgroud)

您将获得一个非交互式会话,并且只要运行命令(或脚本或其他任何内容),ssh 就会退出。如何获得交互式会话,同时运行我从本地计算机指定的命令。例如,我希望能够打开屏幕并重新启动特定的屏幕会话:

ssh me@example.com 'screen -r 12345'
Run Code Online (Sandbox Code Playgroud)

但这是不允许的,返回错误“必须连接到终端”。我认为这基本上意味着“必须从交互式 shell 调用此命令”。

再举一个例子,我在工作中使用了大量的机器,这些机器通常需要我使用共享帐户才能有权做某些事情(是的,我知道:坏主意,但不要怪我,我没有设置方式),并且它们通常将 ksh 作为默认 shell。我想登录,切换到 bash(或 zsh),并获取我自己帐户的 .bash_profile(或 .zshrc)。如果我可以建立一个交互式 ssh 会话并将命令传递给远程机器以在登录时运行,这将很容易。

我有一个非常笨拙(未经测试)的解决方案,我会发布,但我希望有人知道更好的方法。

更新:对于那些没有意识到这一点的人,我不打算手工完成所有这些,所以告诉我打开一个交互式会话然后手工完成并不能真正解决任何问题。

第二次更新:再次尝试澄清:我正在尝试在服务器上运行(任意)命令(在客户端上以编程方式指定),但随后打开了一个交互式会话,该会话受到这些编程命令所做的任何事情的影响。

ssh

35
推荐指数
3
解决办法
6万
查看次数

ssh + sudo + su 进入登录shell

我有几台机器,我定期 ssh 进入,只是为了使用sudo su我的会话的其余部分作为某个特殊用途的用户登录。一般工作流程是:

mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff
Run Code Online (Sandbox Code Playgroud)

我想把它归结为一个可以别名的单行代码,这样我就可以为每台机器设置一个别名,然后在一个命令中到达我需要的地方,而无需键入sudo su - specialuser样板。我也许me@othermachine可以sudo su在登录时设置为,但我想保持操作的灵活性,就像me我需要的那样。

注意:我无法控制othermachine或控制它的设置方式;这是我在受雇时采用的既定工作流程。)

我的第一个想法是

ssh me@othermachine "sudo su - specialuser"
Run Code Online (Sandbox Code Playgroud)

和这种工作,但它没有提示我,^C杀死它并将我注销,我认为其他各种事情也可能是错误的。

在阅读Run Remote ssh command with Full Login Shell 之后,我尝试了一些更奇特的东西,比如

ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
Run Code Online (Sandbox Code Playgroud)

ssh me@othermachine 'bash -l -c …
Run Code Online (Sandbox Code Playgroud)

ssh sudo bash

12
推荐指数
1
解决办法
2万
查看次数

标签 统计

ssh ×2

bash ×1

sudo ×1