单个命令即可登录SSH并运行程序?


58

有没有一种方法可以构造单个命令以通过SSH登录到远程服务器并在远程登录Shell上运行程序?

在OpenSSH手册中,其内容为:“如果指定了命令,那么它将在远程主机而不是登录shell上执行。” 因此,例如,ssh user@server mail将登录到远程服务器,显示邮箱状态,然后将您返回到本地外壳程序。显示邮件状态后,是否可以保留在远程外壳程序上?

此外,ssh user@server [command]如果命令是程序,例如vim或mutt ,则似乎不起作用。有没有一种方法可以登录到远程Shell并在运行过程中停留在远程Shell中并在退出程序之后运行程序,仅最终通过特定logout命令退出(就像在普通SSH会话中一样)?

我最终希望能够将这样的命令作为别名放入本地.bashrc中,以便可以在需要时快速运行。一个示例是通过SSH登录到远程服务器,然后在远程服务器上打开mutt以读取或发送电子邮件。


显示邮件状态后留在远程Shell上是什么意思?那不等同于运行mail命令后执行ssh ssh remote@server mail ; ssh remote@server吗?另外,任何需要终端的远程执行命令都无法通过ssh生存/工作,对吗?
mkc 2014年

嗯,这似乎确实可以运行该命令,然后获得远程外壳,但这是通过打开一个SSH连接并运行该命令并关闭SSH连接,然后打开另一个SSH连接来实现的。有什么方法可以通过单个首次连接完成所有这些操作?同样,这仍然不能使命令运行程序。
user981178 2014年

Answers:


90

您是否尝试过ssh -t user@server "mail && bash"(或用bash您喜欢的任何外壳替换)?

-t以创建一个伪终端,可以让bash为一个交互式shell中使用是必要的。


1
虽然,我承认,我可能更喜欢只mutttmux或中运行screen,然后我可以随意附加和重新附加,另外我还可以运行任意数量的其他shell。
jsbillings 2014年

1
好吧,我正在使用此命令发现各种行为。如上使用(在答案中),它仍然仅显示邮箱状态然后注销,但现在还显示连接已关闭。如上使用,但是例如使用nano而不是邮件,它打开nano会话,然后在退出时确实返回到远程bash shell,然后必须使用exit而不是退出它logout。我尚无法使用Mutt(或类似工具)对其进行测试。
user981178 2014年

-t选件会产生任何形式的安全问题吗?我以前没有用过。
user981178 2014年

据我所知,-t不会引起任何安全问题。您是否尝试过将替换&&;
brm

由于外壳逻辑,以非零退出状态退出的任何命令都将导致第二个命令无法运行。
jsbillings 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.