ssh_config:指定登录后要在远程计算机上执行的命令


16

这是我先前问题的扩展。ssh登录后,我需要在远程计算机上运行本地存储的命令(即mount /home)。目前,我正在使用:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

可以正常运行,但是我想知道是否可以将此命令放入我的命令中,.ssh/config从而不必每次都键入它。我找到了一个LocalCommand选项,但没有任何RemoteCommand选择。

导入并将command-to-be-executed其存储在本地计算机上,因为它将包含打开加密磁盘的密码。这就是为什么我无法将命令放入.profile远程计算机的原因。

Answers:


6

之前在SuperUser上已经问过这个问题。第一个答案使用了不符合您要求的远程文件,但是第二个答案建议使用本地别名可能是您解决问题的方法。

重要的是,要执行的命令存储在本地计算机上,因为它将包含打开加密磁盘的密码。这就是为什么我无法将命令放入远程计算机上的.profile的原因。

这可能不安全。如果我将echo命令用作ssh命令,它将显示在ps远程服务器上:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo

谢谢,但是在SuperUser的解决方案中,~/.ssh/rc它再次存储在远程计算机上。关于您对ps显示我的命令行参数(包括密码)的评论,这并不打扰我。这是我不信任的远程计算机。我的本地计算机仅由我自己使用,因此没有其他人可以访问ps
Martin Vegter 2013年

6
ps输出从远程机器。关键是:您ssh作为远程命令提供的所有内容都将显示在中的远程服务器上ps
Martin von Wittich 2013年

1
你是对的。感谢您指出了这一点。
Martin Vegter 2013年

1
@MartinvonWittich-每个SE站点都是独立的,因此每个站点具有相同的Q和A(只要它们是该特定站点的主题)是完全可以接受的。如果出现Q且A在另一个SE网站上,则鼓励复制内容。对其进行适当的自定义,使其成为主题。
slm



2

您可以按以下方式在远程计算机的配合下进行此操作。

在本地计算机上,将命令填充到环境变量中LC_SSH_INITIAL_COMMAND。SSH通常配置为传递形式的所有环境变量LC_*,因为这些通常是区域设置。

在远程计算机上,eval "$LC_SSH_INITIAL_COMMAND" 通过~/.ssh/authorized_keys或从每个密钥设置运行~/.ssh/rc(请注意,如果您有~/.ssh/rc文件,则需要xauth手动运行以进行X11转发)。

使用该authorized_keys方法,您可以类似地在SSH会话退出时运行命令(除非shell进程被突然杀死;您至少应捕获HUP信号,以便即使连接断开也可以执行命令)。

但是,这不是进行全局操作(例如挂载文件系统)的好方法。如果已经安装了文件系统(例如由于同时运行SSH命令),则需要注意不要再次安装,并且不要在注销时卸载。对于此用例,我的建议仍然是显式进行挂载,然后运行远程命令而不进行任何特殊操作,并在不再希望访问该文件系统时进行挂载。


0

我没有尝试过,但是一种方法可能是

  • 通过阅读一些env vars在执行您想要的命令Subsystem的遥控器上声明一个sshd_config
  • SendEnv在本地使用.ssh/config以将此类密钥传递给远程服务器
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.