我经常通过与其他同事共享的用户连接到服务器,每次连接到每个服务器时,我都会执行几个命令,如bash
,set -o vi
等。
我想知道是否有办法告诉 ssh 客户端实用程序在将控制权交给我之前在远程服务器上执行这些操作。
基本上是这样的:
echo "bash; set -o vi; <DONT_EXIT>;" | ssh user@host
ssh 客户端实用程序中内置了什么?有任何从我这边执行的解决方法吗?我知道服务器端的解决方法,但这不是我想要的。我找不到任何地方,所以,我基本上确认这实际上无法完成。
我正在使用带有默认 OpenSSH ssh 实用程序的 Linux。
答案1
我正在寻找的参数是:-t,它将强制 ssh 客户端分配一个终端,因此它看起来像这样:
ssh -t user@host "bash -o vi"
这将使我在连接时自动启用 vi 模式,但执行更多命令会更加棘手,因为如果我之后添加更多命令,它们将在退出 bash 后执行并立即退出所有内容,因此必须在它之前执行所有命令。
答案2
您可以将命令添加到文件中:
~/.bashrc
当你登录时,首先执行这些命令,最后它会给你shell。
答案3
也许用您想要交互的 shell 来完成命令字符串?
ssh user@host "bash -c 'set -o vi; bash'"
我对此进行了测试,它似乎运行了初始命令,然后进行了交互,但是 stdout 没有正确返回。希望其他人可以指出解决方案。