在ssh登录后执行命令

3
我正在通过ssh与许多远程计算机一起工作。我的需求是拥有一个共同的.profile文件(或者是ssh的别名或其他任何东西),用于所有的ssh会话,因为在每台机器上更改它(我不应该再次登录)真的是浪费时间。
是否有可能实现这个需求?
我已经阅读了“PermitUserEnvironment”的设置,以便我可以设置自己的“VAR = VALUE”,但是对于自定义脚本呢?例如,我想执行"set -o vi"之类的命令……

为什么不安装一个常见的.profile/.login呢? - Lars Kotthoff
抱歉,我在Linux方面很“菜鸟”...你能更好地解释一下吗? - noliv-mov
正如你在问题中所说,你可以通过拥有一个共同的.profile文件(或.login,无论你的shell / distribution读取什么)来实现这一点。如果你将该文件复制到所有主机上,你应该会有相同的环境。 - Lars Kotthoff
是的,但是主机太多了,更重要的是有些主机只使用一次和少量命令,因此复制 .profile 文件需要更多时间。此外,我希望每个主机都像其他主机一样,因此如果我更新了“remote_profile”,不需要重新上传到每个主机,只需别名/“连接前要上传的本地文件”即可。 - noliv-mov
关于环境变量,你可以使用SendEnv / AcceptEnv选项,尽管这可能需要修改要登录的服务器上的SSH配置。对于运行自定义脚本,很遗憾,你唯一的选择就是复制并运行它们,或者手动执行命令。你可能可以编写一个SSH的包装器,在登录后自动发送命令到远程服务器 - 我不知道是否已经存在类似的东西。 - Lars Kotthoff
2个回答

1

这里的正确答案是在每台机器上都拥有你的.profile或.bashrc,或者其他文件的副本。

只需编写一个小的shell脚本并将这样的文件通过scp复制到您需要的每个机器上。像这样的三行代码

for i in list_of_machines
do
   scp .profile $i:
done

就可以为您完成这项工作。

您可以使用shell的$()表示法从文件中获取机器列表,如$(cat filename),或者如果真的需要,可以通过编程方式生成它。

更好的方法是,如果这些都是虚拟主机或其他自动生成的机器云,请在创建机器时将.profile放入账户中。


0
如果您使用PuTTY作为SSH客户端,您可以在Connection->SSH菜单中使用“控制SSH连接选项”。在“远程命令”框中输入命令。将设置保存为默认设置,它将预设为所有新会话。

1
但是这样你将没有一个登录shell,而只有执行命令的输出... - glglgl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接